简单内表操作实例:
REPORT z_simple_itab.
DATA: begin of line, "work area
num TYPE i,
sqr TYPE i,
end of line, "internal table
itab LIKE STANDARD TABLE OF line WITH KEY table_line.
DO 5 TIMES.
line-num = sy-index.
line-sqr = sy-index ** 2.
APPEND line TO itab.
ENDDO.
LOOP AT itab INTO line.
WRITE: / line-num, line-sqr.
ENDLOOP.
CLEAR itab.
定义内表语法:
TYPES|DATA itab (TYPE|LIKE) tabkindOF {linetype|lineobj}
[WITH key]
[INITIAL SIZE n].
tabkind:内表种类,linetype:行类型,key:表关键字
1,内表种类:
<1>,标准表:表类型关键字为STANDARD TABLE,有索引
<2>,排序表:表类型关键字为SORTED TABLE,有索引(排序表总是按其表关键字升序排序后再进行存储)
<3>,哈希表:表类型关键字为HASHED TABLE,无索引(只能通过关键字访问,系统用哈希算法管理表中数据)
<4>,一般类型:索引表INDEX TABLE和任意表ANY TABLE
假设t_addr是一个结构表,创建标准表:
TYPE t_addr_table TYPE STANDARD TABLE OF t_addr.
创建排序表:
TYPE t_addr_table TYPE SORTED TABLE OF t_addr.
2,行结构:内表的行结构可以是由任意的类型ABAP数据类型组成。一般来说,内表的行类型大多数是结构体,或者是引用数据字典中的结构形成的,但由单个基本类型或者引用类型组成的数组也常常在程序中出现。如果内表的行结构中还包含有内表类型,则可以构造出十分复杂的数据类型
3,内表的表关键字:在访问内表和内表排序的过程中起着相当重要的作用,使用WITH key指定表关键字,也可以不指定,则系统会使用默认(标准)关键字。
几种形式:
*如果内表行结构是结构体,则可以指定结构体中的某几个字段作为内表关键字,该字段不能使内表或者引用类型,但可以是嵌套结构体。
... WITH [UNIQUE|NON-UNIQUE] KEY comp1 ... compn*如果内表的整个行都是由基本类型字段组成,则可以把内表整行指定为表关键字。如果内表字段本身是结构化类型,则不适指定整行作为关键字段。
... WITH [UNIQUE|NON-UNIQUE] KEY TABLE LINE*如果不指定任何关键字,则可以使用默认的标准关键字,该选项为默认选项。
... WITH [UNIQUE|NON-UNIQUE] DEFAULT KEY扁平结构内表的默认(标准)表关键字是非数字和非内表的组件字段。
举例来说,一个内表有字段姓名(c类型),年龄(n类型)和工资(f类型),则默认的关键字为姓名和年龄。如果内表的整个行都是单个基本类型组成,则默认关键字为整个行,如果内表字段含有内表类型字段,则没有默认关键字。
4.UNIQUE/NON-UNIQUE
选项UNIQUE|NON-UNIQUE决定内表是否允许存在相同关键字的记录,即如果指明为UNIQUE KEY,则通过表关键字能够唯一确定内表的行记录,在程序中不能插入具有相同关键字的多行记录;
1.标准表只能指定为NON-UNIQUE,可以不指定,不指定默认就是NON-UNIQUE。
2.排序表可以为UNIQUE,也可以为NON-UNIQUE.
3.哈希表只能是UNIQUE,其必须指定UNIQUE关键字,如果允许相同的关键字记录,则hash值就相同,所以只能是UNIQUE,不允许重复的关键字存在。
5,初始化内存大小:
... INITIAL SIZE n ...(n值可以为0或者任何正数,除非系统管理员限制一个最大值)
定义内表实例:
REPORT ZTCXHTEST_INTERNAL_TABLE.
TYPES: BEGIN OF address,
street(20) TYPE c,
city(20) TYPE c,
END OF address.
DATA: BEGIN OF company,
name(20) TYPE c,
addresses TYPE address,
END OF company.
DATA: itab_company LIKE HASHED TABLE
OF company
WITH UNIQUE KEY name.
DATA: itab_company_sorted LIKE SORTED TABLE
OF company
WITH UNIQUE KEY name.