一. 什么是內(nèi)表
----------------------------------------------------------------------------------------------------------
(1) 內(nèi)表:僅在程序運行時存在的表格
(2) 作用:
① 系統(tǒng)可實時增加內(nèi)表的大小
② 可根據(jù)程序需要重新組織數(shù)據(jù)庫表格的內(nèi)容
(3) 內(nèi)表結(jié)構(gòu):數(shù)據(jù)類型和數(shù)據(jù)對象,相當(dāng)于類與對象的關(guān)系
(4) 標(biāo)記表格行:內(nèi)表索引/關(guān)鍵字
(5) 訪問內(nèi)表:按行訪問
二、創(chuàng)建內(nèi)表
----------------------------------------------------------------------------------------------------------
(1) Type創(chuàng)建:先聲明,后使用
語法:TYPES <t> <type> OCCURS <n>.
(2) Data創(chuàng)建:使用Work Area
DATA <f> <type> OCCURS <n> [WITH HEADER LINE].
(3) Data創(chuàng)建:不使用Work Area(直接宣告)
語法:DATA: BEGIN OF <f> OCCURS <n>,
<component declaration>,
..............
END OF <f>.
三、使用內(nèi)表
----------------------------------------------------------------------------------------------------------
1、增加
(1) 增加行(可能有重復(fù)行)
語法:APPEND [<wa> TO|INITIAL LINE TO] <itab>.
(2) 根據(jù)標(biāo)準(zhǔn)關(guān)鍵字附加行(沒有重復(fù)行)
語法: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) 在循環(huán)中刪除行
語法:Loop At <Itab> (Into type)
DELETE <itab>.
End Loop.
(2) 用索引刪除行
語法:DELETE <itab> INDEX <idx>.
5、查詢
(1) 循環(huán)讀取
語法:LOOP AT <itab> [INTO <wa>] [FROM <n1>] [TO <n2>] [WHERE <condition>].
.....
ENDLOOP.
(2) 用索引讀取單行
語法:READ TABLE <itab> [INTO <wa>] INDEX <idx>.
(3) 讀取有關(guān)鍵字的單行
語法: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) 非數(shù)值匯總
語法:COLLECT [<wa> INTO] <itab>.
(2) 數(shù)值匯總
語法:Loop At <Itab> (Into type)
Sum.
End Loop.
8、清除
(1) REFRESH <itab>.
解釋:初始化沒有表頭的內(nèi)表,清除所有元素
(2) CLEAR <itab>.
解釋:初始化有表頭的內(nèi)表,清除所有元素
(3) FREE <itab>.
解釋:重置內(nèi)表并直接釋放其內(nèi)存,須在REFRESH或CLEAR后使用