DATA: ITAB LIKE MARA OCCURS 0.
===> 위에 것은 헤더가 없이 선언되었는데
어떨때 사용하는 건가요?
아래 것은 헤더가 있는 선언..
DATA: ITAB1 LIKE MARA OCCURS 0 WITH HEADER LINE.
댓글 7
-
현준탱
2009.02.11 04:23
-
無念군
2009.02.11 05:28
헤더에 올리나 ..
work area 옴기나 별반 차이가 없다고 들었습니다만..
많이 차이나나 ㅋㄷ.
-
okay맨
2009.02.11 17:44
결국 performance(속도) 문제라고 이해해도 되겠죠? 감사합니다. -
카츠
2009.02.11 18:10
스트럭쳐만 따로 필요할때 말고는 거진 헤더있는 인터널 테이블만 써왔는데 sap코리아에서 교육받을때는 따로 쓰는걸 추천해주더군요. -
activeman
2009.02.11 20:11
oop에서는 인터널테이블을 선언할때 헤더가 없는 것으로 선언해서 사용해야 합니다.
그이유는 아래를 읽어 보시면 되겠네요...
herder line으로 선언하면 속도가 차이난다고 말씀하시는데...oop에서는 차이가 나겠지만 oop가 아닌경우에는 차이가 없을 겁니다..
PS: oop에서 헤더라인을 따로 사용하는 이유는 테이블 이름과 헤더라인(work area)의 이름이 같으면 컴파일러가 구분하기 힘들기 때문이 아닐까요..?
Tables with header lines not allowed
Only tables without header lines can be declared in ABAP Objects.
Error message in ABAP Objects if the following syntax is used:
DATA itab TYPE LIKE TABLE OF ... WITH HEADER LINE.
Correct syntax:
DATA: itab TYPE LIKE TABLE OF ... ,
wa LIKE LINE OF itab.
Reason:
It depends on the statement whether the body or header line of a table is accessed. The table name should identify the table uniquely. Programs are easier to read. Tables with header lines do not improve performance.
Note:
When calling external procedures (subroutines and function modules), which contain TABLES parameters in their parameter interface, please note that a TABLES parameter always requires a header line in addition to a table body. When a table without header line is transferred, the header line of the TABLES parameter retains its initial value. When calling such procedures in methods, you have to check whether transfer of the header line is expected in the procedure and evaluated there. You may have to adjust or rewrite the procedure. Method interfaces do not have TABLES parameters.
Short forms not allowed with line operations in Internal Tables
Short forms for operations on table lines are not allowed in ABAP Objects. An explicit work area or field symbol must always be used.
Error message in ABAP Objects if the following syntax is used:
Operations for all table types:
INSERT TABLE itab.
COLLECT itab.
READ TABLE itab ...
MODIFY TABLE itab ...
MODIFY itab ... WHERE ...
DELETE TABLE itab.
LOOP AT itab ...
Operations for index tables
APPEND itab.
INSERT itab ...
MODIFY itab ...
Correct syntax:
Operations for all table types:
INSERT wa INTO TABLE itab.
COLLECT wa INTO itab.
READ TABLE itab ... INTO wa ASSIGNING.
MODIFY TABLE itab FROM wa ...
MODIFY itab FROM wa ... WHERE ...
DELETE TABLE itab FROM wa.
LOOP AT itab INTO wa ... ASSIGNING...
Operations for index tables:
APPEND wa TO itab.
INSERT wa INTO itab ...
MODIFY itab FROM wa ...
Reason:
Clear separation of table and work area. Programs are easier to read. Since only tables without header lines can be declared in classes, this is a limitation only when global tables of the main program are accessed in local classes.
No changes of internal tables in loops -
activeman
2009.02.11 20:18
관련원본은 자료실에 올려 놓겠습니다...
-
카츠
2009.02.11 22:44
펑션을 자제하고 class를 선호하는 최근 sap동향을 보면 맙는 말씀같네요.. 그래서 헤더 사용을 비추천한것이었나보군요.
후... oop도 공부해야 하는군요 ㅠㅠ
data : itab_tmp like line of itab.
loop at itab into itab_tmp.
endloop.
이런 용도로 사용하지 싶은데요^^;
헤더에 올리는 속도 때문에 그런것 같은데요~