程序对内表的操作通过工作区进行,工作区必须具有和内表行一致或者可相互转换的数据结构(一般是与内表行类型相同的结构体),在定义内表对象的同时,还需要定义一个与该内表行结构相同的工作区对象供程序使用,将数据写入内表时,必须先给工作区赋值,然后在工作区添加或插入内表,从内表中读取数据时,需要自己定义的内表行内容覆盖工作区的内容,然后再从程序中使用工作区的内容,工作区对内表的行必须是可以转换的,最好类型完全相同;
系统在创建内表对象的同时可以隐式地定义一个同名工作区(HEADER LINE、表头行或标题行),也称作内表工作区;
DATA table LIKE TABLE OF table1 WITH UNIQUE KEY name WITH HEADER LINE
创建了带表头的内表后,可以认为程序中存在两个数据对象,一个是内表,另一个是与内表行类型相同的结构体;
同一个语句中,表对象名称同时可能代表内表或同名表工作区,则需要在内表的名称之后加[]指明当前操作的是内表对象;
SY-TABIX、INSERT、APPEND、COLLECT、READ、MODIFY、DELETE;
SORT table ASCENDING DESCENDING AS TEXT STABLE;
AT FIRST、AT LAST、NEW field、END OF field、SUM;
CLEAR table、CLEAR table[REFRESH table()、FREE table;
DATA: BEGIN OF address,
street(20) TYPE c,
city(20) TYPE c,
END OF address.
TYPES addresses LIKE STANDARD TABLE OF address WITH NON-UNIQUE KEY city.
DATA: BEGIN OF company,
name(25) TYPE c,
address TYPE addresses,
END OF company.
DATA company_table LIKE HASHED TABLE OF company WITH UNIQUE KEY name.
DATA company_sort_table LIKE SORTED TABLE OF company WITH UNIQUE KEY name.
DATA index TYPE sy-tabix.
company-name = 'Test company'.
address-street = '123 Street'.
address-city = '7 City'.
APPEND address TO company-address.
address-street = '789 Street'.
address-city = '8 City'.
APPEND address TO company-address.
INSERT company INTO TABLE company_table.
CLEAR company.
company-name = 'Test8 company'.
address-street = '123 Street'.
address-city = '2 City'.
APPEND address TO company-address.
address-street = '456 Street'.
address-city = '3 City'.
APPEND address TO company-address.
address-street = '789 Street'.
address-city = '4 City'.
APPEND address TO company-address.
INSERT company INTO TABLE company_table.
READ TABLE company_table WITH TABLE KEY name = 'Test company' INTO company.
WRITE: / sy-tabix, company-name.
LOOP AT company-address INTO address.
WRITE: / sy-tabix, address-street, address-city.
ENDLOOP.
address-street = '987 Street'.
address-city = '8 City'.
READ TABLE company_table WITH TABLE KEY name = 'Test8 company' INTO company.
WRITE: / sy-tabix, company-name.
MODIFY company-address FROM address INDEX 1.
MODIFY TABLE company_table FROM company.
LOOP AT company-address INTO address.
WRITE: / sy-tabix, address-street, address-city.
ENDLOOP.
company_sort_table = company_table.
LOOP AT company_sort_table INTO company.
WRITE / company-name.
SORT company-address.
LOOP AT company-address INTO address.
WRITE: / address-street, address-city.
ENDLOOP.
ENDLOOP.