一. 什么是内表
----------------------------------------------------------------------------------------------------------
(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后使用