DATA : GT_ZTM015 LIKE ZTQM0015.
data : gs_ztm015 like gt_ztm015 occurs 0 with header line. <==A)
loop at i_spec.
update ztqm0015
set vcode = i_spec-vcode
where matnr = itab-plnbez
and aufnr = itab-aufnr
and hogi = i_spec-userc1.
gt_ztm015-user1 = ITAB-USER1.
gt_ztm015-value1 = s_spec-value1.
gt_ztm015-value2 = s_spec-value2.
gt_ztm015-value3 = s_spec-value3.
gt_ztm015-value4 = s_spec-value4.
gt_ztm015-value5 = s_spec-value5.<==가)
modify ztqm0015 from gt_ztm015. <==1)
commit work.
endloop.
update를 위와 같이 하면 가)부분까지는 값이 모두 gt_ztm015까지 들어가 있는데
1)부분만 오면 1)부분의 gt_ztm015에 non이 들어가있습니다.
그래서 1)부분을 거치면 ZTQM0015테이블의 해당aufnr의 값이 모두 삭제되는 현상이
나타납니다.
다른곳에서 위의 경우처럼 써서 저도 사용했는데
A)와 같이 정의하여 쓰는 것이 잘못된 것인가요?
댓글 4
-
크리스~
2008.03.20 17:55
-
풍뎅이
2008.03.20 18:12
답변 감사드립니다. 그런데 --->빠진부분을 넣으면
gt_ztm015 is not an internal table -the "occurs n" specification is missing라는 오류가 생깁니다.
-
activeman
2008.03.20 18:30
에러나는 이유는 gt_ztm015를 structure 로 정의해서 에러가 납니다( DATA : GT_ZTM015 LIKE ZTQM0015.)
structure에 append를 하시면 에러가 나겠지요..
그리고 프로그램이 좀 이상하죠..
loop를 돌리면서 db에 modify를 하시면 performence가 떨어 집니다..
이럴경우는 gs_ztm015에 자료를 모두 생성한후
modify ztqm0015 from table gs_ztm015 를 사용하여 한번에 db에 modify 하는게
performence를 위해서 좋습니다..
참고하세요..
PS:인터널테이블을 생성하실때 이름을 gt_xxxx, structure를 생성하실때는 gs_xxxx으로 통일하십시요
그래야 다른분이 유지 보수 하실때 헷깔리지 않으실 겁니다.
-
풍뎅이
2008.03.20 19:20
해결되었습니다.
loop at i_spec.
update ztqm0015
set vcode = i_spec-vcode
where matnr = itab-plnbez
and aufnr = itab-aufnr
and hogi = i_spec-userc1.
gt_ztm015-user1 = ITAB-USER1.
gt_ztm015-value1 = s_spec-value1.
gt_ztm015-value2 = s_spec-value2.
gt_ztm015-value3 = s_spec-value3.
gt_ztm015-value4 = s_spec-value4.
gt_ztm015-value5 = s_spec-value5.<==가)
APPEND GT_ZTM015. CLEAR GT_ZTM015 . --> 이부분이 빠진것 같습니다.
modify ztqm0015 from gt_ztm015. <==1)
commit work.
endloop.