一、內表定義.
1.1參照表類型創建內表——先定義類型,參照類型定義內表.
TYPES:BEGIN OF s_type, no(6) TYPE c, name(10) TYPE c, part(16) TYPE c, END OF s_type. DATA:gt_itab TYPE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.
參照結構體創建內表
DATA:BEGIN OF s_type, no(6) TYPE c, name(10) TYPE c, part(16) TYPE c, END OF s_type. DATA:gt_itab LIKE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.
1.2 參照表定義內表
語法: DATA:itab TYPE <t_itab> WITH {UNIQUE|NON-UNIQUE} KEY <keys> [INITIAL SIZE <n>][WITH HEADER LINE].
DATA gt_itab TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid. DATA gs_str LIKE LINE OF gt_itab.
二、內表操作
2.1.內表賦值.
"內表帶表頭的話,下面語句只賦值表頭。
MOVE itab1 TO itab2."同於 itab2 = itab1.
"賦值表體數據
MOVE itab1[] TO itab2[]. "同於 itab2[] = itab1[].
"表類型不同時或者字段順序不同時。
MOVE-CORRESPONDING itab1 TO itab2.
2.2.內表初始化
CLEAR、REFRESH、FREE.
1).CLEAR .
CLEAR itab.
--返回內存空間.
--itab如果帶表頭,只清楚表頭,如果不帶表頭,清除表體數據。
CLEAR itab[]."清除帶表頭內表的表體數據。
2)REFRESH.
REFRESH itab.
--刪除表內數據,不刪除內存空間,釋放須執行free.
3).FREE.
FREE itab.
2.3.內表排序
1.SORT.
SORT ITAB [ASCENDING|DESCENDING].
2.指定排序字段.
SORT ITAB [ASCENDING|DESCENDING] BY f1 [ASCENDING|DESCENDING] ... fn [ASCENDING|DESCENDING].
2.4 內表屬性.
DESCRIBE TABLE itab [LINES gv_line][OCCURS gv_init][KIND gv_kind].
LINES: 返回內表包含的數據數.
OCCURS:返回內表的初始大小.
KIND : 內表類型,T代表標准表,S代表排序表,H代表哈希表.
三、追加內表
INSERT、APPEND、COLLECT三種方式實現內表追加數據。
3.1.INSERT.
1)插入一條數據.
INSERT line INTO TABLE itab.
成功:sy-subrc返回0;已存在返回4,不發生dump error。
2)多條數據.
INSERT LINES OF itab1 [FROM n1][TO n2] INTO TABLE itab2."itab1 itab2表結構相同.
3)利用索引追加
INSERT line INTO TABLE itab [INDEX idx]. INSERT LINES OF itab1 INTO itab2 [INDEX idx].
3.2.APPEND
只支持按照索引進行追加.
1.追加一條數據.
APPEND line TO itab.
2.追加多條數據.
APPEND LINES OF itab1 TO itab2. APPEND LINES OF itab1 [FROM n1][TO n2] TO itab2.
3.3.COLLECT
當存在相同關鍵字時,合計數字類型的字段,不存在相同關鍵字,則追加數據.
COLLECT wa INTO itab.
四、修改內表數據
1.利用關鍵字修改一條數據.
MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2..].
--如果關鍵字重復時,只會修改第一條數據. TRANSPORTING 修改指定關鍵字的值.
2.修改多條數據.
MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2..]WHERE cond."限制檢索條件.
3.利用索引修改一條數據.
MODIFY itab FROM wa [INDEX idx][TRANSPORTING f1 f2..].
--只適合於標准表和排序表.
五、刪除內表數據.
1.關鍵字刪除一條數據.
DELETE TABLE itab [FROM wa]. DELETE TABLE itab WITH TABLE KEY k1=f1 ...kn=fn.
2.WHERE條件刪除.
DELETE itab WHERE cond. DELETE gt_itab WHERE carrid = 'AA'.
3.利用索引刪除.
DELETE itab [INDEX idx]. DELETE itab FROM n1 TO n2. "刪除索引號n1~n2間的數據. DELETE itab FROM n1. "刪除n1以后的數據. DELETE itab TO n2. "刪除n2之前的數據
4.刪除重復行.
DELETE ADJACENT DUPLICATES ENTRIES FROM itab [COMPARING f1 f2...| ALL FIELDS].
--執行前,先sort排序
六、讀取內表數據
當存在表頭時,對應數據保存至表頭,否則保存到工作區。
1.關鍵字讀取數據.
READ TABLE itab FROM wa INTO result. READ TABLE itab WITH TABLE KEY k1 = f1 kn = fn INTO result. gs_line_carrid = 'AA'. READ TABLE gt_itab FROM gs_line INTO gs_line. READ TABLE gt_itab WITH TABLE KEY carrid = 'AB' INTO gs_line.
2.利用索引讀取數據.
READ TABLE itab INDEX idx INTO result. READ TABLE gt_itab INTO gs_line INDEX 1.