SAP ABAP 内表及其声明(标准表/排序表/哈希表、内表操作、清空内表)
1.概述:内表是程序运行过程中创建的存储空间,是内存中建立的临时表,程序结束后,会被释放。可对内表执行插入、修改和删除操作。
2.分类:
表名 |
说明 |
效率 |
语法 |
标准表 |
在增加或插入数据行时不对数据行的地址进行重新排序,包含index,可通过index和key查找,只能包含non unique key,key可为 |
效率取决于表的行,随行数线性增加 |
TYPE TABLE OF、TYPE STANDARD TABLE OF
|
排序表 |
在增加或插入数据行时对数据行的地址进行重新排序,包含index,可通过index和key查找,可包含unique和non unique key,key必需;具有自动排序功能,所以SORT关键字对其没有任何意义,还会导致编译错误 |
效率取决于表的行数,随行数对数级增长 |
TYPE SORTED TABLE OF |
哈希表 |
只能通过关键字访问,在检索数据里与数据行数无关,不包含index,只能通过key查找,只能包含unique key,key必需 |
效率与行数无关,数据量大的情况下使用关键字查询时最快的
|
TYPE HASHED TABLE OF
|
示例:
TYPES:BEGIN OF TY_STU,
ID TYPE N,
NAME TYPE STRING,
AGE TYPE I,
END OF TY_STU.
表名 |
示例 |
注意 |
标准表 |
DATA GT_STU1 TYPE STANDARD TABLE OF TY_STU. |
只能使用NON-UNIQUE,可以省略 |
排序表 |
DATA GT_STU2 TYPE SORTED TABLE OF TY_STU WITH UNIQUE KEY ID. |
是否可以存储重复的,取决于定义时指定的KEY类型是UNIQUE还是NON-UNIQUE |
哈希表 |
DATA GT_STU3 TYPE HASHED TABLE OF TY_STU WITH UNIQUE KEY ID. |
只能使用UNIQUE,不能省略 |
3.内表操作:
操作类型 |
说明 |
语法 |
APPEND |
追加数据(哈希表不支持) |
① LOOP AT ITAB1 APPEND ITAB1 TO ITAB2. ENDLOOP. ②APPEND LINES OF ITAB1 TO ITAB2. |
INSERT |
①标准表:与APPEND效果一样;排序表:根据关键字插入合适位置;哈希表:通过哈希算法根据关键字计算出插入的位置。②向UNIQUE的排序表/哈希表插入重复的数据,数据不会插入成功,不抛异常 |
① INSERT WA INTO TABLE ITAB. ② INSERT LINES OF ITAB1 INTO ITAB2. |
DELETE
|
①删除单行:TABLE KEY(NON-UNIQUE类型的表,当查找多条时,只会删除第一条)②删除多行:WHERE③删除临近重复行:ADJACENT DUPLICATE |
DELETE ITAB. |
READ |
标准表:顺序查找;排序表:二分查找;哈希表:根据哈希算法查找 |
READ TABLE ITAB INTO WA.
|
CHANGE |
|
MODIFY TABLE ITAB FROM WA
|
COLLECT |
内表分类汇总 |
①COOLECT <work area> INTO ITAB. ②COOLECT ITAB. |
MODIFY |
①修改单条记录:TABLE KEY(NON-UNIQUE类型的表,当查找多条时,只会修改第一条)②修改多条记录:WHERE |
①根据索引:MODIFY ITAB FROM WA INDEX IDX. ②根据关键字段:MODIFY TABLE ITAB FROM WA. |
AT |
内表的第一行触发 |
AT FIRST. …… ENDAT. |
内表的最后一行触发 |
AT LAST. …… ENDAT. |
|
按内表列F,列的左边发生改变时触发(可用于按年、月、日统计) |
AT NEW F. …… ENDAT. |
|
按内表列F,列的右边发生改变时触发 |
AT END OF F. …… ENDAT. |
|
SORT |
排序 |
SORT ITAB. |
DESCRIBE |
获取内表行数 |
DESCRIBE TABLE ITAB LINES DATA(LV_LINE). |
LINES |
DATA(LV_DATA) = LINES(ITAB). |
4.清空内表
CLEAR ITAB:仅清空HEADER LINE,对内表数据存储空间不影响
REFRESH ITAB:清空内表数据存储空间,对HEADER LINE不影响
DREE ITAB:清空内表数据存储空间,对HEADER LINE不影响