ABAP之内表定义、insert、read、update、delete
一、内表定义.
1.1参照表类型创建内表——先定义类型,参照类型定义内表.
TYPES:BEGIN OF s_type, no(6) TYPE c, name(10) TYPE c, part(16) TYPE c, END OF s_type. DATA:gt_itab TYPE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.
参照结构体创建内表
DATA:BEGIN OF s_type, no(6) TYPE c, name(10) TYPE c, part(16) TYPE c, END OF s_type. DATA:gt_itab LIKE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.
1.2 参照表定义内表
语法: DATA:itab TYPE <t_itab> WITH {UNIQUE|NON-UNIQUE} KEY <keys> [INITIAL SIZE <n>][WITH HEADER LINE].
DATA gt_itab TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid. DATA gs_str LIKE LINE OF gt_itab.
二、内表操作
2.1.内表赋值.
"内表带表头的话,下面语句只赋值表头。
MOVE itab1 TO itab2."同于 itab2 = itab1.
"赋值表体数据
MOVE itab1[] TO itab2[]. "同于 itab2[] = itab1[].
"表类型不同时或者字段顺序不同时。
MOVE-CORRESPONDING itab1 TO itab2.
2.2.内表初始化
CLEAR、REFRESH、FREE.
1).CLEAR .
CLEAR itab.
--返回内存空间.
--itab如果带表头,只清楚表头,如果不带表头,清除表体数据。
CLEAR itab[]."清除带表头内表的表体数据。
2)REFRESH.
REFRESH itab.
--删除表内数据,不删除内存空间,释放须执行free.
3).FREE.
FREE itab.
2.3.内表排序
1.SORT.
SORT ITAB [ASCENDING|DESCENDING].
2.指定排序字段.
SORT ITAB [ASCENDING|DESCENDING] BY f1 [ASCENDING|DESCENDING] ... fn [ASCENDING|DESCENDING].
2.4 内表属性.
DESCRIBE TABLE itab [LINES gv_line][OCCURS gv_init][KIND gv_kind].
LINES: 返回内表包含的数据数.
OCCURS:返回内表的初始大小.
KIND : 内表类型,T代表标准表,S代表排序表,H代表哈希表.
三、追加内表
INSERT、APPEND、COLLECT三种方式实现内表追加数据。
3.1.INSERT.
1)插入一条数据.
INSERT line INTO TABLE itab.
成功:sy-subrc返回0;已存在返回4,不发生dump error。
2)多条数据.
INSERT LINES OF itab1 [FROM n1][TO n2] INTO TABLE itab2."itab1 itab2表结构相同.
3)利用索引追加
INSERT line INTO TABLE itab [INDEX idx]. INSERT LINES OF itab1 INTO itab2 [INDEX idx].
3.2.APPEND
只支持按照索引进行追加.
1.追加一条数据.
APPEND line TO itab.
2.追加多条数据.
APPEND LINES OF itab1 TO itab2. APPEND LINES OF itab1 [FROM n1][TO n2] TO itab2.
3.3.COLLECT
当存在相同关键字时,合计数字类型的字段,不存在相同关键字,则追加数据.
COLLECT wa INTO itab.
四、修改内表数据
1.利用关键字修改一条数据.
MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2..].
--如果关键字重复时,只会修改第一条数据. TRANSPORTING 修改指定关键字的值.
2.修改多条数据.
MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2..]WHERE cond."限制检索条件.
3.利用索引修改一条数据.
MODIFY itab FROM wa [INDEX idx][TRANSPORTING f1 f2..].
--只适合于标准表和排序表.
五、删除内表数据.
1.关键字删除一条数据.
DELETE TABLE itab [FROM wa]. DELETE TABLE itab WITH TABLE KEY k1=f1 ...kn=fn.
2.WHERE条件删除.
DELETE itab WHERE cond. DELETE gt_itab WHERE carrid = 'AA'.
3.利用索引删除.
DELETE itab [INDEX idx]. DELETE itab FROM n1 TO n2. "删除索引号n1~n2间的数据. DELETE itab FROM n1. "删除n1以后的数据. DELETE itab TO n2. "删除n2之前的数据
4.删除重复行.
DELETE ADJACENT DUPLICATES ENTRIES FROM itab [COMPARING f1 f2...| ALL FIELDS].
--执行前,先sort排序
六、读取内表数据
当存在表头时,对应数据保存至表头,否则保存到工作区。
1.关键字读取数据.
READ TABLE itab FROM wa INTO result. READ TABLE itab WITH TABLE KEY k1 = f1 kn = fn INTO result. gs_line_carrid = 'AA'. READ TABLE gt_itab FROM gs_line INTO gs_line. READ TABLE gt_itab WITH TABLE KEY carrid = 'AB' INTO gs_line.
2.利用索引读取数据.
READ TABLE itab INDEX idx INTO result. READ TABLE gt_itab INTO gs_line INDEX 1.