Internal Table에서 특정 조건에 만족하는 row를 삭제하려고 합니다.
현재 아랫 부분의 소스처럼 구현하면 이상없이 원하는 결과가 출력이 되는데,
Loop문 안에서 header에 올려서 삭제 해주는 것과 차이가 있는건가요?
Loop문 안에서 구현하려 한다면 무엇이 잘못된건지 지적 부탁드리겠습니다.
------------------------------------------------------------------
SELECT a~matnr b~plnnr b~plnal b~plnty b~loekz b~plnty
INTO CORRESPONDING FIELDS OF TABLE it_01
FROM mara AS a
LEFT OUTER JOIN mapl AS b
ON a~matnr = b~matnr
WHERE a~mtart = p_mtart
AND a~matnr IN s_matnr
AND a~ersda IN s_ersda.
DELETE it_01 WHERE loekz = 'X'. "Deletion ID 삭제
DELETE it_01 WHERE NOT plnty = 'N'. "Type N 선택
LOOP AT it_01.
* DELETE it_01 WHERE loekz = 'X'. "Deletion ID 삭제
* DELETE it_01 WHERE NOT plnty = 'N'. "Type N 선택
* IF it_01-loekz EQ 'X'.
* DELETE it_01 WHERE loekz = 'X'.
* ENDIF.
*
* IF it_01-plnty NE 'N'.
* DELETE it_01 WHERE NOT plnty = 'N'.
* ENDIF.
IF it_01-plnnr IS INITIAL.
it_01-routing = '@02@'.
ELSE.
it_01-routing = '@01@'.
ENDIF.
IF it_01-matnr IS INITIAL.
it_01-master = '@02@'.
ELSE.
it_01-master = '@01@'.
ENDIF.
MODIFY it_01.
ENDLOOP.
IF sy-subrc NE 0.
MESSAGE s000 WITH '해당 Data가 없습니다.'.
STOP.
ENDIF.
-----------------------------------------------------------------------
댓글 3
-
버미!
2010.06.22 02:20
-
페리
2010.06.22 02:24
LOOP AT it_01.
IF it_01-loekz EQ 'X'.
DELETE it_01.
continue.
ENDIF.
IF it_01-plnty NE 'N'.
DELETE it_01.
continue.
ENDIF.
.
.
.
endif.
loop 문일때는 위와같이 해야할꺼에요
-
Chaconne
2010.06.22 02:38
버미! 님, 페리님 답변 감사합니다. 해결도 되었고, 흐름상 Logic도 다시 한번 생각해 보게 되었습니다. 감사합니다.
Loop 밖에서 Delete 구문이나 Loop 안 Delete 구문은 같습니다.
허나 한번 실행이나 매번 subrc ne 0 이 나오면서 실행하느냐죠..