1、创建内表
可以利用下面两种方法定义内表:
- 参照局部表类型创建内表
- 参照全局数据库表创建内表
1.1 参照局部表类型创建内表
TYPES : BEGIN OF ty_test,
no(6) TYPE C,
name(10) TYPE C,
dept(10) TYPE C,
END OF ty_test.
DATA gt_test TYPE STANDARD TABLE OF ty_test WITH HEADER LINE."带表头行
gt_test-no = '0001'.
gt_test-name = 'GML'.
gt_test-dept = 'CST-RDC'.
APPEND gt_test.
LOOP AT gt_test.
WRITE:gt_test-no,gt_test-name,gt_test-dept.
ENDLOOP.
也可以直接定义结构体然后参照此结构体定义内表,此时不能用type语句,需使用like语句。
DATA : BEGIN OF ty_test,
no(6) TYPE C,
name(10) TYPE C,
dept(10) TYPE C,
END OF ty_test.
DATA : gt_test LIKE STANDARD TABLE OF ty_test, "不带表头行
gs_test LIKE ty_test.
gs_test-no = '0001'.
gs_test-name = 'GML'.
gs_test-dept = 'CST-RDC'.
APPEND gs_test TO gt_test.
LOOP AT gt_test INTO gs_test.
WRITE:gs_test-no,gs_test-name,gs_test-dept.
ENDLOOP.
1.2参照全局数据库表创建内表
DATA : gt_scarr TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid,
gs_scarr LIKE LINE OF gt_scarr.
SELECT * FROM scarr INTO gt_scarr.
LOOP AT gt_scarr INTO gs_scarr.
WRITE : / gs_scarr-carrid,gs_scarr-carrname.
ENDLOOP.
2.内表与表头
表头也叫工作区,定义内表时追加with header line 语句会自动生成表头。
例如:
DATA itab TYPE type WITH HEADER LINE.
比较内表循环语句中带表头的内表与不带表头的内表的使用方法。使用不带表头的内表时,需通过工作区(Work area)编辑内表中的数据,而使用带表头的内表时,则可以直接使用内表名编辑内表值。
下表整理了带表头与不带表头的内表使用的相关语句:
不带表头是使用的语句 | 带表头是使用的语句 |
---|---|
所有内表(Stardard,Sorted,hashed type) | |
INSERT WA INTO TABLE ITAB. | INSERT TABLE ITAB. |
COLLECT WA INTO TABLE ITAB. | COLLECT ITAB. |
READ TABLE ITAB ...INTO WA. | READ TABLE ITAB. |
MODIFY TABLE ITAB FORM WA. | MODIFY TABLE ITAB. |
MODIFY ITAB FROM WA ... WHERE.... | MODIFY TABLE ITAB. |
DELETE TABLE ITAB FORM WA. | DELETE TABLE ITAB. |
LOOP AT ITAB INTO WA. | LOOP AT ITAB. |
INDEX表(stardard,sorted type) | |
APPEND WA TO ITAB. | APPEND ITAB. |
INSERT WA INTO ITAB.. | INSERT ITAB.. |
MODIFY ITAB FROM WA.. | MODIFY ITAB.. |