本文主要介绍一下SAP ABAP中内表的工作区和表头
工作区
工作区的含义
工作区就是一个与对应内表结构完全一致的结构体,但是工作区内只能存储至多一条数据。对于内表中数据的增删查改都需要通过工作区去进行操作
PS:注意!最好给每一个内表都设置对应的工作区,并且每次数据操作完毕后都要清空工作区!除此之外,工作区的数据都需要先APPEND进内表,否则内表中不会有任何数据!!!下面用两个案例来进行演示!(使用的表为索引表)
案例代码演示(使用APPEND语句)
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT. "参照数据库表sflight定义内表 DATA:GS_SFLIGHT TYPE SFLIGHT. "参照数据库表sflight定义工作区 GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20221031'. GS_SFLIGHT-PRICE = 1500. APPEND GS_SFLIGHT TO GT_SFLIGHT. "将工作区中数据插入内表中 MODIFY SFLIGHT FROM TABLE GT_SFLIGHT.
效果演示(使用APPEND语句)
案例代码演示(不使用APPEND语句)
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT. "参照数据库表sflight定义内表 DATA:GS_SFLIGHT TYPE SFLIGHT. "参照数据库表sflight定义工作区 GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20221031'. GS_SFLIGHT-PRICE = 1500. MODIFY SFLIGHT FROM TABLE GT_SFLIGHT.
效果演示(不使用APPEND语句)
表头
表头的含义
表头是一个与内表名字相同的工作区,需要在创建内表时最后使用【WITH HEADER LINE】语句进行定义,对于拥有表头的内表来说,其增删查改语句相较没有表头的内表可以进行简化,下面会列出常用的对比
含表头内表的创建
下面用一个案例来进行演示:
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT WITH HEADER LINE. "参照数据库表sflight定义含表头内表
PS:
1)表头行的符号是一顶帽子;
2)指定内表需要在后面加上"[]",比如指定GT_SFLIGHT内表需要写成"GT_SFLIGHT[]",否则系统会认为GT_SFLIGHT是同名工作区
带表头内表与不带表头内表语句比较
PS:【wa】代表工作区,【itab】代表内表
- 所有内表(Standard,Sorted,Hashed Type)
不带表头时使用的语句 | 带表头时使用的语句 |
INSERT wa INTO TABLE itab. | INSERT TABLE itab. |
COLLECT wa INTO itab | COLLECT itab. |
READ TABLE itab... INTO wa. | READ TABLE itab... |
MODIFY TABLE itab FROM wa. | MODIFY TABLE itab... |
MODIFY itab FROM wa... WHERE... | MODIFY itab... WHERE... |
DELETE TABLE itab FROM wa. | DELETE TABLE itab. |
LOOP AT itab INTO wa... | LOOP AT itab... |
- INDEX表(Standard,Sorted Type)
不带表头时使用的语句 | 带表头时使用的语句 |
APPEND wa TO itab. | APPEND itab. |
INSERT wa INTO itab... | INSERT itab. |
MODIFY itab FROM wa... | MODIFY itab... |