ABAP内表用法小结
ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数
据
不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的
内表支持循环对每行数据进行操作,也支持整体操作
内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据
ABAP中有三种内表类型:标准表,哈希表,排序表
-ABAP内表数据类型
内表数据对象是实际的内表,可以用数据进行填充
内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)
可以使用的内表数据类型有:
Structure
数据库表
用户自定义数据类型
-\BAP内表声明
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
append
插入内表行
insert
insert
读取内表行
read
read
修改内表行
modify
modify
-read itab index 3 .
—itab-XX = ‘ xxx .
-modify itab index 4 .
删除内表行
delete
-带表头行和不带表头行语法一致。
内表循环
Loop at
Loop at
endloop. “ 不带表头行内表操作
-循环体的MODIFY , DELETE等语句不必指定INDEX项,系统默认处理当前行. -如果不需要读取所有的内表行,可以使用WHERE选项进行限制
-LOOP AT
清空内表
clear
clear
内表排序
SORT
ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序
TEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段
删除重复行