일단 정리를 하자면 ----
테이블 "zbitem"에 자료(필드)가 "1,2,3" 이 있습니다.
이 테이블(zbitem)을 테이블 컨트롤 (인터널 테이블로 크로스판딩 하였음)을 이용해서 스크린에 띄웠습니다.
"chk"를 이용하여 선택한 자료(필드)를 삭제하려 합니다.
여기서 저는
LOOP AT itab WHERE chk = 'X'.
DELETE TABLE itab.
DELETE zbitem
FROM TABLE itab.
ENDLOOP.
이렇게 하면 될거 같았는데 ...ㅠ.ㅠ
저렇게 하니
LOOP AT itab WHERE chk = 'X'.
DELETE TABLE itab.
이건 제대로 동작하였습니다. 인터널 테이블에서 선택한 자료(1번 필드)는 삭제가 되더군요.
그렇지만
DELETE zbitem
FROM TABLE itab.
이 구문에 와서는 선택하고 남은 자료(2.3 필드)를 zbitem 테이블에서 삭제를 하더군요.
결과적으로 1번 자료(필드)를 삭제하고자 한것이 1번 자료를 제외한 나머지 자료가 삭제되는 꼴이 됐습니다.
DELETE zbitem
FROM TABLE itab.
이것 대신
MODIFY zbitem
FROM TABLE itab.
이걸 사용하니 아예 zbitem 테이블에 반영이 안되더군요.
### 질문입니다.
1. 체크(chk) 한걸 제외한 나머지를 삭제하란 명령어가 있는지 궁금합니다.
2. 삭제된 인터널 테이블을 원(zbitem)테이블에 반영할수 있는 방법이 궁금합니다.
두가지 다 해결해주시면 정말 감사하겠구요...둘중 한가지만이라도 알게 된다면 당장 제가 하고 싶은건 해결을 할수
있을거 같습니다.
그럼 아시는분의 답변 기다리고 있겠습니다.^^
댓글 6
-
SAP폐인
2008.12.29 01:58
-
CoMAN
2008.12.29 18:58
1> 윗분처럼 로직으로 해결하심 되고,
2> 개인별로 사용하는 로직이 다르겠지만, 저는 주로..
(1) internal table에서 레코드 삭제할때 cbo table에서도 같은 레코드 삭제함
-> 이건 좀 위험하긴 합니다.. 취소시 복구로직을 넣어주어야함.
(2) 변경된 itab을 저장시, 처음 select한 로직으로 해당 cbo 테이블 내용을 삭제한 다음
itab내용을 insert 또는 modify합니다.
*상황에 따라 사용합니다....
-
꼬맹이
2008.12.30 00:39
삭제 하실 땐, Validation Check 후 필히 Commit Work, Rollback Work 사용 하셔야 해요...
안 그럼 후달달 입니다... ^^;
-
Joey
2009.01.02 19:40
꼬맹이 님의 말씀에 백배공감합니다.. -
tenyearsago
2009.01.02 20:48
감사합니다. 질문올린후에 혼자 궁리하다 해결을 하긴 했는데 답글보니 좋은 참고 됐습니다. ^^
-
가을바람
2009.01.05 18:42
저도 도움 됐습니다.. 감사합니다..
1. chk 'X'가 아닌경우를 삭제한 다음에..
delete itab where chk <> 'X'.
2. chk 'X'만 남은 itab을 zbitem에서 삭제하면 되는건가요?
delete zbitem from table itab.