쌓고 쌓다
Lock Object 사용할때 _COLLECT 파라미터 주의사항 본문
인트로
Lock Object를 사용해보려고
혼자 영화관 좌석 예약 프로그램을 만들어보다..
다음과 같은 이상현상을 발견했다.

첫번째 박스에는
THEATER_ID : 영화관 지점 코드
SEAT_ROW : 좌석 행 번호
SEAAT_COL : 좌석 열 번호
이렇게 입력 받은 좌석을 LOCK을 거는 코드이다.
이때 모든 좌석을 한번에 락을 걸고자 _COLLECT 파라미터를 사용했다.
_COLLECT에 모인 락 요청들은
'FLUSH_ENQUEUE' 펑션을 통해 한번에 락을 요청할 수 있다.
이때, 락 거는데 문제가 있다면 SY-SUBRC = 1을 반환한다.
그래서
두번째 박스에서는 락 에러 발생시
락 실패를 알리고 RETURN 하는 코드를 작성했다.
_COLLECT 사용시
위와 같이 작성하면 문제가 발생한다..
아.. 우선
_COLLECT는
메모리에 락 요청들을 모았다가
이 요청들을 묶어서 한번에 요청하겠다는 파라미터이다.
락을 순차적으로 걸다가 문제가 발생시
기존에 걸었던 락들도 하나하나 풀기 번거로울거 같아서
한번에 묶어서 처리하고자 _COLLECT를 사용했다.
문제 상황
락을 한번에 걸다 문제가 발생했을때
RETURN을 해버리면
기존에 문제가 되는 락 데이터가 메모리에 그대로 남아있다.
그래서
정상적으로 락을 걸 수 있는 데이터를 가지고
락을 요청하더라도
기존의 락을 걸 수 없는 데이터가 메모리에 남아있기에
성공적인 락 결과를 받을 수 없다.

위처럼
락 실패시
'RESET_ENQUEUE' 펑션을 사용해서
메모리에 남겨둔 락 요청 모음들을 비워주자.
요청한 락들을 푸는
‘DEQUEUE_ALL’ 이라는 펑션도 있는데
이건 폭탄과도 같다고한다.(재미나이 피셜)
모든 락을 풀어버린다고하는데 어떤 기준으로 풀어버리는지 모르겠다.
그래서 상세하게 찝어서 DEQUEUE 날려주기.
'SAP > ABAP' 카테고리의 다른 글
| Function Module에서 SELECT-OPTIONS 사용하기 (0) | 2026.05.16 |
|---|---|
| CALL FUNCTION할때 EXCEPTIONS와 SY-SUBRC 관계 (2) | 2026.05.02 |
| LOOP문 내에서 Internal Table MODIFY TABLE과 MODIFY 차이 (0) | 2026.04.15 |
| [ABAP] RTTS (RunTime Type Service) (0) | 2026.03.15 |
| CREATE_DYNAMIC_TABLE과 LVC_T_SCOL (0) | 2026.03.12 |