어떨 때는 MODIFY itab.
해도 데이터가 바디에 Modify 되는가 하면
또 어떨 때는 덤프가 떨어지고요.
그래서 modify table itab .
을 쓰면 될 때도 있고 ..
또 저걸 쓰니까 바디에 modify 되질 않네요 ..
도대체 차이가 뭘까요??
댓글 4
-
엉큼고냥이
2008.07.10 23:54
-
activeman
2008.07.11 03:33
엉큼고냥이 님의 말씀에 좀더 추가를 할려고 합니다.
abap에서는 modify라는 개념을 나눠서 생각을 하셔야 합니다.
일반 db에 사용하는 modify와 인터널테이블에 사용하는 modify가 있습니다.
db에 modify를 하면 키값이 일치하는 자료가 있으면 update, 없으면 insert가 됩니다.
그러나 인터널테이블에서는 update 역할만 하게 됩니다. 자료가 없을 경우에 insert가 되지 않습니다.
인터널테이블에 자료를 modify 하실때 자료가 없다면 append ( 또는 insert) 해줘야 합니다..
즐밥하세요..
-
디카초올~
2008.07.11 10:34
기본적으로 MODIFY 문은 UPDATE 와 INSERT 속성을 모두 가지고 있는 구문입니다.
MODIFY 내용이 테이블 내에 존재하지 않는 경우 INSERT, 존재하는 경우 UPDATE 로 작용한다는 말이지요.
흔히 MODIFY 문을 LOOP 내에서 사용하는데 우짤때는 INVALID INDEX... 하는 요상꾸리한 DUMP 가 발생하곤 합니다.
기본적으로 MODIFY itab 문은 Internal Table (이하 itab) 내의 INDEX 위치를 addition 으로 반드시 지정하여 사용토록 되어있으나,
itab 자신의 LOOP 를 수행하는 경우 INDEX addition 의 생략이 가능합니다.(SY-TABIX 시스템필드에 값이 저장되어 있지요.)
허나, 다른 itab 의 LOOP 를 수행하면서 그와는 다른 itab 의 내용을 MODIFY 한다면 반드시 INDEX 를 명시해 주어야
INVALID INDEX... DUMP 를 방지할 수 있습니다.(시스템은 다른 녀석의 INDEX 위치는 전혀 모릅니다.)
또한 MODIFY TABLE 문은 여러 라인의 특정 필드값을 동일하게 변경하고자 하는 경우에 사용합니다.
자세한 내용은 F1 을 누르셔서 확인하실 수 있습니다.
많은 도움이 되셨기를...
-
지의
2008.07.11 17:06
인터널 테이블의 키 값을 확인 해 보세요.
loop at itab.
modify itab.
endloop.
해도 덤프 발생하는 경우가 있습니다. ^^
위에경우는 인터널 테이블에 데이터가 없으면 덤프 떨어지는거 같구요
modify할경우에는 항상 데이터가 있는지 체크해야됩니다