内表是ABAP编程中一种特有的变量,内表的增加,删除,修改,查找,及其常见。

一. 内表的行的增加的语法
1.1数据库表与内表插入方法的区别

数据库表增加的方法:insert
内表的增加的方法: insert, append ,collect
insert(插入新行)
append(添加到最后一行)
collect (求和要么没有重复的条目,还有就是把数字部分相加)

1.2 以下是插入单行

insert wa into | initial(空行) line into tab index idx(行).
insert wa INTO | INITIAL LINE INTO TABLE itab.

1.3以下是插入多行

insert lines of itab1 [FROM IDX][TO IDX2] INTO itab2 [index idx3].

1.4 语法

以下是基本语法
insert lines of [from] [to ]
into [index.】
append wa to itab.
collect wa into itab.
附加内表行
append lines of < itab1> [from ] [to ] to .
复制内表
MOVE to .
= .
以下也可以插入到表。
SELECT … INTO TABLE
SELECT … APPENDING TABLE .

二. 实践部份
2.1:内表的初始化

由于工作区和内表是变量,以下是清量工作区和内表的方法
clear[] refresh(内表)
clear (清空工作区).
如果有工作区和内表,又要clear和refresh.

2.2:insert增加

1增加数据到标准表

TYPES:BEGIN OF TY_itab1,   " 结构类型
   field1 type char10,
   field2 type int2,
  END OF ty_itab1.
DATA: itab1 type TABLE OF TY_itab1.
DATA :WA_ITAB1 TYPE TY_itab1.
WA_ITAB1-field1 = '00001'.
WA_ITAB1-field2 = 0001.
INSERT WA_ITAB1 INTO ITAB1 INDEX 1.
APPEND WA_ITAB1 TO itab1.
COLLECT WA_ITAB1 INTO itab1.
    

观察表的变化
在这里插入图片描述

2.排序表的插入,以及两个表的复制.

TYPES:BEGIN OF TY_itab1,   " 结构类型
   field1 type char10,
   field2 type int2,
  END OF ty_itab1.
DATA: itab1 type TABLE OF TY_itab1.
DATA: ITAB2 TYPE TABLE OF TY_ITAB1.
" 添加条目到排序表
DATA ITAB8 TYPE SORTED TABLE OF TY_itab1 WITH UNIQUE KEY field1.
DATA :WA_ITAB8 TYPE TY_itab1.
WA_ITAB8-field1 = '00001'.
WA_ITAB8-field2 = 0001.
INSERT WA_ITAB8 INTO ITAB8 INDEX 1.
WA_ITAB8-field1 = '00002'.
WA_ITAB8-field2 = 0002.
APPEND WA_ITAB8 TO itab8.
COLLECT WA_ITAB8 INTO itab8.
" 添加一个内表到另外一个表里
APPEND LINES OF itab1 to itab2.
APPEND LINES OF itab1 FROM 1 TO 2 TO ITAB2.
INSERT LINES OF itab1 INTO ITAB2 INDEX 2  .
2.3: 修改,主要是用modify来修改
TYPES:BEGIN OF TY_itab1,   " 结构类型
   field1 type char10,
   field2 type int2,
  END OF ty_itab1.
DATA: itab1 type TABLE OF TY_itab1.
DATA: ITAB2 TYPE TABLE OF TY_ITAB1.
DATA :WA_ITAB1 TYPE TY_itab1.
WA_ITAB1-field1 = '00001'.
WA_ITAB1-field2 = 0001.
INSERT WA_ITAB1 INTO ITAB1 INDEX 1.
APPEND WA_ITAB1 TO itab1.
COLLECT WA_ITAB1 INTO itab1.

" 添加条目到排序表
DATA ITAB8 TYPE SORTED TABLE OF TY_itab1 WITH UNIQUE KEY field1.
DATA :WA_ITAB8 TYPE TY_itab1.
WA_ITAB8-field1 = '00001'.
WA_ITAB8-field2 = 0001.
INSERT WA_ITAB8 INTO ITAB8 INDEX 1.
WA_ITAB8-field1 = '00002'.
WA_ITAB8-field2 = 0002.
APPEND WA_ITAB8 TO itab8.
COLLECT WA_ITAB8 INTO itab8.
" 添加一个内表到另外一个表里
APPEND LINES OF itab1 to itab2.
APPEND LINES OF itab1 FROM 1 TO 2 TO ITAB2.
INSERT LINES OF itab1 INTO ITAB2 INDEX 2  .
" 更新+定位行
WA_ITAB8-field1 = 'HELLO'.
WA_ITAB8-field2 = 9.
MODIFY ITAB2 FROM WA_ITAB8 INDEX 2.      " 更改行
MODIFY ITAB2 FROM WA_ITAB8 INDEX 3 TRANSPORTING field1 ." 更新某行的某个字段
MODIFY ITAB2 FROM WA_ITAB8  TRANSPORTING field2  WHERE field1 = '0001'. " 更新某列的其它字段

2.4:删除数据(删除部份数据)

语法
按条件删除
delete itab where k1=v1 and …kn=vn.
按工作区的内容删除
Delete table itab [from wa].
删除具体行
DELETE ITAB INDEX idx.
删除具体范围
DELETE ITAB FROM IDX1 TO IDX2
删除重复的数据,执行此条件前必须先排序
DELETE ADJACENT DUPLICATES FROM ITAB.
排序
sort itab by [ f1 f2 …fn] ascending /descending
没有删除之前

在这里插入图片描述
代码

DElete itab2  WHERE  field2 = 1.

删除之后
在这里插入图片描述

删除重复行前
在这里插入图片描述

SORT ITAB2  BY FIELD1.
DELETE ADJACENT DUPLICATES FROM ITAB2.

删除重复行后
在这里插入图片描述

2.5 读取数据(read 和loop)

Read:读取某一行的数据到到工作区;
READ TABLE ITAB INTO WA.
READ TABLE ITAB INTO WA WITH KEY K1 = V1…Kn=Vn
[BINARY SEARCH]. (可以用二分法来读取)
READ TABLE ITAB INTO WA INDEX I.
使用READ 操作的表必须推荐header line 作为查出人数据存储口。
BINARY SEARCH 可以提高内表数据查找的速度,但是使用前必须先对内表进行排序
LOOP循环常用于实现内表数据的循环读取和操作
LOOP AT ITAB.
WRITE :ITAB.
ENDLOOP.

读取某一行数据

CLEAR WA_ITAB8 .
READ TABLE ITAB2 INTO WA_ITab8 INDEX 2.

以下是以某个条件来读取(read要与if sy-subrc一起用)

READ TABLE ITAB2 into WA_ITAB8  WITH key field1 = 'HELLO'.

结果
在这里插入图片描述
以下是loop来读数据

CLEAR WA_ITAB8.
LOOP AT ITAB2 INTO WA_ITAB8 WHERE field1 ='00001'.
  WRITE / WA_ITAB8-field2.
ENDLOOP.

以下是读出来的结果
在这里插入图片描述

2.6 append 的用法
loop at goodsmovements WHERE move_type = '261'.                          
 goodsmovements1-material =   GOODSMOVEMENTS-material .
 goodsmovements1-entry_qnt =  GOODSMOVEMENTS-entry_qnt .
 goodsmovements1-plant = goodsmovements-plant.
 goodsmovements1-stge_loc = goodsmovements-stge_loc.
 append goodsmovements1.
ENDLOOP.
LOOP AT goodsmovements1 .
   COLLECT goodsmovements1 INTO goodsmovements2.
ENDLOOP.
clear goodsmovements[].
loop at goodsmovements2[] into goodsmovements2.
  MOVE-CORRESPONDING goodsmovements2 to goodsmovements.
  append goodsmovements to goodsmovements[].
ENDLOOP.

以下是with header line的区别

TYPES:BEGIN OF TY_itab1,   " 结构类型
   field1 type char10,
   field2 type int2,
  END OF ty_itab1.
DATA :WA_ITAB8 TYPE TY_itab1.  
DATA : ITAB9 TYPE TABLE OF TY_itab1 WITH HEADER LINE.  
CLEAR WA_ITAB8.
WA_ITAB8-field1 = 1.
WA_ITAB8-field2 = 1.
APPEND WA_ITAB8 TO ITAB9.
ITAB9-field1 = 2.
ITAB9-field2 = 2.
APPEND ITAB9.
三. 总结

1.如果没有主键,在一个数据库表中,则以非数字型的键为主键。
2.写入和读取都会用到工作区;
3.内表是更新行,数据库表则是更新非键字段;
4.modify 与delete都不用from(如果是带表头的);
5.内表本来是一个变量,所以说没有select这个字段,也没有update这个字段;
6.delete itab(We use index for it as possible as. When you use index, the speed is very fast).
7.Read itab (If we use it , I can’t delete it ).

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐