05—内表

内表是内存中建立的一个临时表,你可以在程序运行时对表的数据进行增删改查,程序跑完了,内表就会被释放。

内表有三种类型:

1.STANDARD 标准表

2.SORTED 排序表

3.HASHED 哈希表

标准表在增加或者插入数据时并不对数据的地址进行重新排序存储

排序表在增加和插入数据时要对数据存储的地址进行重新排列

哈希表只能通过关键字访问,在检索数据里与数据数无关

WITH [UNIQUE]|[NON-UNIQUE] KEY COMP1…COMPn

WITH [UNIQUE]|[NON-UNIQUE] KEY TABLE_LINE定义关键字

排序表可以使用NON-UNIQUE或者UNIQUE表关键字,哈希表不能使用NON-UNIQUE表关键字,且必须指定UNIQUE关键字,在内表中如果不指定任何表关键字,则使用DEFAULT KEY。扁平结构内表默认表关键字是非数字和非内表的组件字段

在定义内表时使用WITH HEADER LINE选项表示定义内表时也同时定义同名工作区,如果在使用的过程中不能明确的分辨出使用的是内表或者是工作区,那么在名称后加上"[]"表示明确的使用内表

工作区:内表按照行进行访问,必须使用某个区域作为表格互相传输的接口

从内表读取数据时,已定址的行内容覆盖工作区的内容。读数据写入内表时,必须首先在工作区输入内容

内表的定义

①TYPES自定义类型来定义内表

TYPES:

BEGIN OF <TY_ITAB>

END OF <TY_ITAB>

DATA < ITAB > TYPE TABLE OF <TY_ITAB>

或者:

TYPES:<T_ITAB> TYPE <TY_ITAB> OCCURS 0.

DATA < ITAB > TYPE <T_ITAB>.

或者:

TYPES:<T_ITAB> TYPE TABLE OF <TY_ITAB>

DATA < ITAB > TYPE <T_ITAB>.

②DATA直接定义内表

DATA:BEGIN OF < ITAB > OCCURS <>

END OF ITAB.

③参考定义

参考已定义的内表来定义内表

DATA < ITAB > LIKE <内表>.

参照数据字典里的结构

DATA < ITAB > TYPE TABLE OF <STRUCTURE/TABLE>

使用INCLUDE STRUCTURE包括已经存在的结构体所有字段

DATA:BEGIN OF < ITAB > OCCURS 0.

INCLUDE STRUCTURE .

DATA:< FIELD > TYPE < TYPE >.

DATA:END OF < ITAB >.

内表的操作

①初始化表

REFRESH:清空全部内容,没有清空工作区的内容

CLEAR:只清空工作区,如果想清空内表,变量后加[]

②增加数据

INSERT可以按内表的具体字段向表中插入一行或者多行数据

插入单行数据,如果要插入一条空白行,使用INITIAL LINE

INSERT WA(工作区) INTO|INITIAL LINE INTO ITAB INDEX IDX

INSERT WA INTO|INITIAL LINE INTO TABLE ITAB.

插入多行数据

INSERT LINES OF ITAB1 [FROM IDX] [TO IDX2] INTO ITAB2 [INDEX IDX3].

1.要增加内表,既可以逐行添加数据,也可以复制另一个表格的内容,要逐行填充内表,也可以使用APPEND,COLLECT或者INSERT语句。

1.1要将内表仅用于存储数据,处于性能方面的考虑,建议使用APPEND

1.2要计算数字字段之和或要确保内表中没有出现重复条目,使用COLLECT语句

1.3要在内表先有行之前插入语句,使用INSERT语句

语法:

APPEND < WA > TO|INITIAL LINE TO .

COLLECT < WA > INTO .

INSERT < WA > INTO|INITIAL LINE INTO INDEX .

2.将内表内容复制到另一个内表中

2.1要将内表行附加到另一个内表中,请使用APPEND语句

2.2要将内表行插入到另一个内表中,使用INSERT语句

2.3要将内表条目内容复制到另一内表中,并且覆盖该目标表格,使用MOVE语句

语法:

附加内表行:

APPEND LINES OF < ITAB1 > [FROM < N1 >] [TO ] TO .

插入内表:

INSERT LINES OF < ITAB1 > [FROM < N1 >] [TO ]

INTO < ITAB2 > [INDEX < IDX >]

复制内表:

MOVE < ITAB1 > TO < ITAB2 >.

< ITAB2 >=< ITAB1 >

3.通过OPEN SQL将数据表中的数据按照条件查询后放入内表

SELECT…INTO TABLE < ITAB >

SELECT…APPENDING TABLE < ITAB >

③更改数据

MODIFY(直接修改内表数据)按内表位置或具体内表字段值相等条件修改内表数据

MODIFY ITAB [FROM WA] [INDEX IDX] [TRANSPORTIG F1…FN] WHERE COND.

④删除数据

DELETE(删除内表数据)

DELETE TABLE itab WITH TABLE KEY k1=v1…kn=vn.

按具体值删除

DELETE TABLE itab [FROM wa].

参照其它内表值删除

DELETE itab INDEX idx.

删除具体行数据

DELETE itab FROM idx1 TO idx2.

删除具体行数范围间数据

DELETE ADJACENT DUPLICATES FROM itab.

删除重复数据,执行此条件前必须先排序

⑤读取数据

READ依据具体行数或字段值等条件读取某一内表的数据

READ TABLE itab FROM wa.

READ TABLE itab WITH [TABLE] KEY k1=v1…kn=vn [BINARY SEARCH].

READ TABLE itab INDEX i.

使用READ操作的表必须得HEADER LINE作为查找出的数据存储窗口

BINARY SEARCH可以提高内表数据查找的速度,但是使用前必须先对内表进行排序

LOOP循环常用于实现内表数据的循环读取和操作

LOOP AT ITAB.

WRITE: ITAB.

ENDLOOP.

⑥排序和汇总

对内表进行排序,可以指定具体的排序字段、排序方式(升/降),语法如下

SORT itab [BY f2 f2…fn] [ASCENDING/DESCENDING]

< f2 >:为指定的字段

递减(DESCENDING)和递增(ASCENDING)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值