아래와 같은 소소코드가 있습니다.
LOOP AT GT_SEL.
* SELECT SINGLE *
* FROM ZTSD0806
* WHERE WERKS = P_WERKS
* AND DALBG = GT_SEL-DALBG
* AND CAR_CD = GT_SEL-CAR_CD
* AND KUNNR = GT_SEL-KUNNR
* AND NAME = GT_SEL-NAME.
READ TABLE GT_ITAB INTO GS_ITAB WITH KEY DALBG = GT_SEL-DALBG
WERKS = GT_SEL-WERKS
CAR_CD = GT_SEL-CAR_CD
KUNNR = GT_SEL-KUNNR
NAME = GT_SEL-NAME.
IF SY-SUBRC <> 0. "이미 있는 자료면 수정일자...신규자료명 생성일자에 값을 셋팅한다.
GT_SEL-ZZERDAT = SY-DATUM. "입력할때 현재일,동록자 이름이 자동으로 셋팅.
GT_SEL-ZZERZET = SY-UZEIT.
GT_SEL-ZZERNAM = SY-UNAME.
ELSE.
GT_SEL-ZZAEDAT = SY-DATUM. "입력할때 현재일,동록자 이름이 자동으로 셋팅.
GT_SEL-ZZAEZET = SY-UZEIT.
GT_SEL-ZZAENAM = SY-UNAME.
ENDIF.
MODIFY GT_SEL.
MODIFY ZTSD0806 FROM TABLE GT_SEL.
CLEAR GT_SEL.
ENDLOOP.
(1) ZTSD0806이란 테이블의 값은 이미 GT_ITAB에 넣어뒀습니다.
(2) 어떤 자료를 관리하는 프로그램인데, 신규등록시 등록시간/등록일/등록자 필드에 값을 넣고,
수정시, 수정시간/수정일/수정자 필드에 값을 넣기위한 로직입니다.
(3)따라서 값이 이미 있는건지 아닌지를 체크해야하는데,
예를들어, 가/나/다 3개의 값을 신규로 입력하는 경우에
위에 주석처리한 부분같이 체크를 하면
가/등록시간/등록일/등록자 값이 생성이되는데
나/수정시간/수정일/수정자
다/수정시간/수정일/수정자 로 값이 생성됩니다.
실제로 디버깅을 걸어보면 LOOP를 돌때 맨처음 '가'일경우는 SUBRC가 '4'였는데,
'나' 일경우 SUBRC가 '0' 이 찍히더군요.
그래서, 궁여지책으로 READ TABLE 구문을 이용하니 원하는 대로 로직이 구현되었는데,
여기서 질문은 왜 주석부분과 같이 값의 유무를 체크하면 안되는건인가...입니다.
답변부탁드릴게요~~~~
아, 그렇군요. 감사합니다