ABAP的内表操作(初始化,增,删,改 ,读取)
内表的增加,删除,修改,查找,在ABAP编程中同样用的很多。由于工作区和内表是变量,以下是清量工作区和内表的方法clear[]refresh(变量内表)clear (清空工作区).如果有工作区和内表,又要clear和refresh.1.内表的行的增加数据库表增加的方法:insert内表的增加的方法: insert, append ,collect以下是插入单行insert wa into | in
内表是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 ).
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)