한고개 넘고 나니 또 다른 고개들이 절 기다리네요..
계속 될것 같은데 안되니 답답하네요.
vbak 와 zzwarrobp 테이블을 각각 인터널 테이블에 넣어서,
lt_zzwarrobp01 에 vbeln and aedat 와 동일한 값이 없는 it_vbak 를 it_zzwarrobp02 에 넣어서 이걸 zzwarrobp 테이블에 append 하는 거거든요
여기서 답변을 얻어 READ TABLE 구문을 알게 되었습니다.
1.--> 표시되어 있는 부분에 With Key 이하 조건을 여러개 걸 경우, AND 의 의미 인가요? 아님 OR 의 의미인가요?
저의 목적은 AND 거든요. 두개의 조건이 충족하는걸 Search 해야하는데 OR 의 개념이라면 Select 구문으로 다시 생각해 봐야해요..
2.--> 표시 되어 있는부분에서는 Rollback work 가 실행되요.
조건엔 문제가 없는데.. 게다가 키필드인 vbeln 이 존재하더라도 Append 해야하는데 Insert 로는 안되네요.
이럴땐 어떻게 해야하는지..
WHEN 'UPDT'.
CLEAR: lt_vbak, lt_zzwarrobp01, lt_zzwarrobp02, ls_vbak, ls_zzwarrobp02.
REFRESH: lt_vbak, lt_zzwarrobp01, lt_zzwarrobp02.
SELECT vbeln ernam aedat zzwar_stdate_end zzwar_lasdlv_end zzewa_month waerk netwr
FROM vbak INTO CORRESPONDING FIELDS OF TABLE lt_vbak.
SELECT * FROM zzwarrobp INTO TABLE lt_zzwarrobp01.
SORT lt_vbak BY vbeln aedat.
SORT lt_zzwarrobp01 BY vbeln aedat.
LOOP AT lt_vbak INTO ls_vbak.
1.--> READ TABLE lt_zzwarrobp01 INTO ls_zzwarrobp WITH KEY vbeln = ls_vbak-vbeln
aedat = ls_vbak-aedat
BINARY SEARCH.
IF sy-subrc = 0.
ELSE.
MOVE-CORRESPONDING ls_vbak TO ls_zzwarrobp02.
APPEND ls_zzwarrobp02 TO lt_zzwarrobp02.
ENDIF.
CLEAR: ls_zzwarrobp02, ls_zzwarrobp, ls_vbak.
ENDLOOP.
IF NOT lt_zzwarrobp02[] IS INITIAL.
2.--> INSERT zzwarrobp FROM TABLE lt_zzwarrobp02 ACCEPTING DUPLICATE KEYS.
IF sy-subrc EQ 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.
1. Read 문의 조건절은 And입니다.
2. zzwarrobp 테이블의 구조를 알아야 겠네요..
굳이 중복을 허용한다면 Insert 구문의 Acceptin 절이 없어도 되겠네요..
그리고 if not lt_zzwarrobp02[]에서 []는 빼셔도 되겠네요..Body만 있는 itab이니..