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.
原文地址:https://www.cnblogs.com/zs-chenkang/p/13258544.html