ABAP的内表操作(初始化,增,删,改 ,读取)

内表是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 ).

ABAP中,内表操作可以通过以下几种方式实现: 1. 内表数据:可以使用DELETE语句来内表中的数据。DELETE语句可以根据索引或条件来内表的行。例如,可以使用DELETE TABLE itab FROM wa来内表itab中的行wa。还可以使用DELETE TABLE itab FROM wa INDEX idx来根据索引idx内表itab中的行。此外,还可以使用DELETE ADJACENT DUPLICATES FROM itab COMPARING field1 field2来内表itab中的相邻重复行。 2. 聚集附加:使用COLLECT语句可以将工作区的关键字段值与内表中的字段值进行比较。如果相同,则不在内表中追加新行,而是将工作区的数值字段值与内表中相关行的字段值累加,并将工作区的数值更新到内表中的相关行。如果比较后找不到相关行,则将工作区的内容添加到内表中。例如,可以使用COLLECT line INTO itab来将工作区line的内容添加到内表itab中。 3. 修内表数据:可以通过直接对内表的字段进行赋值来修内表中的数据。例如,可以使用itab-field = value来修内表itab中的字段值。 4. 查询内表数据:可以使用LOOP语句来遍历内表读取内表中的数据。例如,可以使用LOOP AT itab INTO wa来遍历内表itab,并将每一行的数据赋值给工作区wa进行处理。 综上所述,通过DELETE语句可以内表数据,使用COLLECT语句可以聚集附加数据,直接对内表字段进行赋值可以修内表数据,而使用LOOP语句可以查询内表数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SAP abap内表分类与操作](https://blog.csdn.net/weixin_49198221/article/details/125150445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值