DATA : BEGIN OF IT_TABLE OCCURS 0 와 같이 선언을 일반적으로 하는데요.
OCCURS 0 라함은 데이타 사이즈를 8KB 메모리 설정함을 의미합니다.
디버그 모드에서 Bound Allocation memory를 확인해보게 되면,
해당 데이타사이즈가 몇 Bytes가 바운드가 되었는지 확인이 가능합니다.
만약, 아래와같은 덤프가 확인 되었다면, 인터널 테이블의 데이타 양에 따른 메모리 사이즈의 적절한 조정이 필요합니다.
Category Resource Shortage
Runtime Errors TSV_TNEW_BLOCKS_NO_ROLL_MEMORY
댓글 4
-
칼잇수마
2014.02.13 17:47
-
Brisky
2014.02.13 20:55
좋은 글 감사합니다.
하지만 OCCURS 0 는 더 이상 사용하지 않는것을 추천하는 것 같아요.
http://scn.sap.com/thread/1442790
Hi bhavana,
welcome to SDN.
First let me tell you that OCCURS 0/ OCCURS n is now obsolete and no more used.
in place of that we use
data : gt_t001 type standard table of t001, "internal table without header line gs_t001 type t002."work area of the same type which can be used to retrieve value from the internal table select * from t001 into table gt_itab up to 10 rows. clear : gs_t001. loop at gt_t001 into gs_t001. write : gt_t001-bukrs. clear : gs_t002. endloop.
Now.
about occurs 0 and occurs n
Occurs N stores n number of rows for the itab and repeats that number of spaces again when more than N records as inserted to the table.
Occurs 0 stores 8KB space in the memory for your itab initially. so some times this was disadvantage that memory will be wasted if you are not using that much space.
hope this helps
Somu
-
양키(이경환)
2014.02.14 18:11
네 맞습니다. OOP Context에서 Like 타입의 사용이 허용되지않습니다.
때문에 Occurs 구문의 폐기가 오래전(?)부터 당연하게 이루어 졌지만
헤더라인을 쉽게 포기할 수 없는 원로개발자부터 코딩 스타일이 몸에밴 개발자님들까지
아직도 공공연하게 사용되어지고 있는것이 사실이구요. (Ecc6.0부터 폐기되었다고 사용하지 못하는것은 아니라서도 있을것 같네요)
SAP에서는 아래와 같은 구문의 사용을 권장 합니다.
[예제]
* Table declaration (old method)
DATA: BEGIN OF tab_ekpo OCCURS 0, "itab with header line
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF tab_ekpo.
*Table declaration (new method) "USE THIS WAY!!!
TYPES: BEGIN OF t_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF t_ekpo.
DATA: it_ekpo TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0, "itab
wa_ekpo TYPE t_ekpo. "work area (header line)
* Build internal table and work area from existing internal table
DATA: it_datatab LIKE tab_ekpo OCCURS 0, "old method
wa_datatab LIKE LINE OF tab_ekpo.
* Build internal table and work area from existing internal table,
* adding additional fields
TYPES: BEGIN OF t_repdata.
INCLUDE STRUCTURE tab_ekpo. "could include EKKO table itself!!
TYPES: bukrs TYPE ekpo-werks,
bstyp TYPE ekpo-bukrs.
TYPES: END OF t_repdata.
DATA: it_repdata TYPE STANDARD TABLE OF t_repdata INITIAL SIZE 0, "itab
wa_repdata TYPE t_repdata. "work area (header line) -
졸고있는지렁이
2014.08.24 11:59
클래스(oop)내에서 코딩시만 그렇습니다.
이유야 다 아시겠지만 header line 과 internal table의 명칭이 동일하여
독립개체로 인식할 수 없기 때문이죠.
기존 프로그램에서는 상관없구요.
감사합니다