一. 什么是內表
----------------------------------------------------------------------------------------------------------
(1) 內表:僅在程序運行時存在的表格
(2) 作用:
① 系統可實時增加內表的大小
② 可根據程序需要重新組織數據庫表格的內容
(3) 內表結構:數據類型和數據對象,相當于類與對象的關系
(4) 標記表格行:內表索引/關鍵字
(5) 訪問內表:按行訪問
二、創建內表
----------------------------------------------------------------------------------------------------------
(1) Type創建:先聲明,后使用
語法:TYPES <t> <type> OCCURS <n>.
(2) Data創建:使用Work Area
DATA <f> <type> OCCURS <n> [WITH HEADER LINE].
(3) Data創建:不使用Work Area(直接宣告)
語法:DATA: BEGIN OF <f> OCCURS <n>,
<component declaration>,
..............
END OF <f>.
三、使用內表
----------------------------------------------------------------------------------------------------------
1、增加
(1) 增加行(可能有重復行)
語法:APPEND [<wa> TO|INITIAL LINE TO] <itab>.
(2) 根據標準關鍵字附加行(沒有重復行)
語法:COLLECT [<wa> INTO] <itab>.
(3) 表外增加
語法:APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2>.
2、插入
(1) 在指定行前插入
語法:INSERT [<wa> INTO|INITIAL LINE INTO] <itab> [INDEX <idx>].
(2) 外表插入
語法:INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>]
INTO <itab2> [INDEX <idx>].
3、修改
語法:MODIFY <itab> [FROM <wa>] [INDEX <idx>].
4、刪除
(1) 在循環中刪除行
語法:Loop At <Itab> (Into type)
DELETE <itab>.
End Loop.
(2) 用索引刪除行
語法:DELETE <itab> INDEX <idx>.
5、查詢
(1) 循環讀取
語法:LOOP AT <itab> [INTO <wa>] [FROM <n1>] [TO <n2>] [WHERE <condition>].
.....
ENDLOOP.
(2) 用索引讀取單行
語法:READ TABLE <itab> [INTO <wa>] INDEX <idx>.
(3) 讀取有關鍵字的單行
語法:READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINARY SEARCH].
6、排序
語法:SORT <itab> [<order>] [AS TEXT]
[BY <F1> [<order>] [AS TEXT] ... <fn> [<order>] [AS TEXT]].
7、匯總
(1) 非數值匯總
語法:COLLECT [<wa> INTO] <itab>.
(2) 數值匯總
語法:Loop At <Itab> (Into type)
Sum.
End Loop.
8、清除
(1) REFRESH <itab>.
解釋:初始化沒有表頭的內表,清除所有元素
(2) CLEAR <itab>.
解釋:初始化有表頭的內表,清除所有元素
(3) FREE <itab>.
解釋:重置內表并直接釋放其內存,須在REFRESH或CLEAR后使用