ABAP 内表用法小结_abap内表用法小结
ABAP 内表用法小结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“abap内表用法小结”。
ABAP 内表用法小结
ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的内表支持循环对每行数据进行操作,也支持整体操作
内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据
ABAP中有三种内表类型:标准表,哈希表,排序表 – ABAP内表数据类型
内表数据对象是实际的内表,可以用数据进行填充
内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)可以使用的内表数据类型有: Structure 数据库表
用户自定义数据类型 –ABAP内表声明 1> TYPES: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line.* 声明一个数据类型
DATA: ITAB_WA TYPE(LIKE)line.“声明一个内表工作区
DATA: ITAB TYPE(LIKE)line OCCURS 0.“声明一个无工作区的内表 DATA: ITAB TYPE(LIKE)STANDARD TABLE OF line INITIAL SIZE 0.“声明一个有工作区的内表 DATA: ITAB TYPE(LIKE)line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE)STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.2> DATA: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line.* 声明一个line对象,该对象可以作为工作区使用
* 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区 DATA: ITAB_WA TYPE(LIKE)line.“声明一个工作区
DATA: ITAB TYPE(LIKE)line OCCURS 0 WITH HEADER LINE.“声明一个带工作区的内表
DATA: ITAB TYPE(LIKE)STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.“声明一个带工作区的内表 3>直接定义内表,这个内表是有工作区的 DATA: BEGIN OF ITAB OCCURS 0 , CARR1 LIKE SPFLI-CARRID, CONN1 LIKE SPFLI-CONNID, END OF ITAB.* DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。正确方法:DATA: ITAB1 TYPE ITAB OCCURS 0.(这样定义后的是一个无工作区的内表)。
DATA: ITAB1 LIKE ITAB OCCURS 0 WITH HEADER LINE.“定义一个带工作区内表
4> type ref to 定义内表
type ref to 属于ABAP中面向对象的编程。它是定义一个类的对象。5>通过数据库表定义
data itab1 type table of sflight.“定义一个不带内表的工作区 data wa1 like line of sflgit.“定义一个内表工作区
data itab1 type table of sflight with header line.“定义一个带内表的工作区
–两种内表定义方式的主要区别在于是否有隐式表头行
内表是按行进行访问的,然而,程序对内表的行操作不能直接进行,必须使用一种接口来传输,这个接口就是工作区(Work Area)–内表操作 填充内表行
append to “不带表头行的填充 append “带隐式表头行的填充 插入内表行
insert into [INDEX idx] “
insert [INDEX idx ] “隐式表头行插入内表 –如果没有指定INDEX,则默认插入到内表最后一行 读取内表行
read into [INDEX idx] read [INDEX IDX] 修改内表行
modify from [INDEX idx] modify [INDEX idx] – read itab index 3.– itab-XX = ‘xxx’.– modify itab index 4.删除内表行 delete [INDEX idx].–带表头行和不带表头行语法一致。内表循环
Loop at into.endloop.“带表头行的内表循环操作 Loop at.endloop.“不带表头行内表操作
–循环体的MODIFY,DELETE等语句不必指定INDEX项,系统默认处理当前行.–如果不需要读取所有的内表行,可以使用WHERE选项进行限制 – LOOP AT [WHERE ] 清空内表
clear.“清空不带表头行内表 clear[].“清空带表头行内表 内表排序
SORT [ASCENDING | DESCENDING] [AS TEXT] –ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序
–AS TEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段 删除重复行
DELETE ADJACENT DUPLICATES FROM [COMPARING ].–删除重复行之前须对内表进行排序 判断内表行数
DESCRIBE TALBE LINES.将内表中部分或全部的数据行整体插入另一内表
INSERT LINES OF [FROM n1] [TO n2] INTO [TABLE] [INDEX ].– insert lines of itab1 from 1 to 100 into itab2.“将内表1前100行数据附加到内表2.–两个内表必须具有相同的或可转换的行结构 将内表中部分或全部的数据行整体填充到另一内表
APPEND LINES OF [FROM n1] [TO n2] TO.按照条件或者索引删除一组选定行
DELETE [FROM n1] [TO n2] [WHERE ].– delete itab1 from 1 to 100 where age >30.“删除内表前100行中年龄大于30 的记录。
整体复制内表,目标内表原有内容被覆盖
MOVE TO 不带表头行的内表之间进行复制 MOVE [] TO [].带表头行的内表之间进行复制
MOVE TO [].不带表头行的内表复制到带表头行的内表
MOVE-CORRESPONDING TO 复制内表1中与内表2具有相同结构的字段进行复制,同样适用于工作区