1.内表定义

内表是内存中建立的一个临时表,它同样是程序运行中被临时创建的一个存储空间,内表是一个变量,都具有插入,修改,删除等操作,程序跑完了,就会被释放。

2.内表的分类

内表实际上分为一般内表(standard table),排序表(sorted table),哈希表(Hashed table)。
标准表:在增加或插入数据行时并不对数据行的地址进行重新排序存储。
排序表:在增加和插入数据行时要对数据存储的地址进行重新排列。
哈希表:只能通过关键字进行访问,在检索数据里与数据行数无关.
with [ unique | non-unique] key comp1…compN " 排序表可以使用
with [unique | non-unique] key table_line

3.工作区

with header line:定义了带工作区的内表。
工作区:内表按照行进行访问,必须使用某个区域作为与表格互相传输的接口。
在内表中读取数据时,已定址的行内容覆盖工作区的内容。讲数据写入内表时,必须首先在工作区中输入数据。

4.内表的定义方法
4.1 参考自定义类型

types: begin of <ty_itab>

end of <ty_itab> ”定义类型
data type table of <ty_itab>.

4.2 参考表类型1

types:<t_itab> type <ty_itab> occurs 0. "定义表类型
data type <t_itab>

4.3 参考表类型2

types:<t_itab> type table of <ty_itab>. “定义表类型
data type <t_itab>.

4.4 直接定义内表

data直接定义内表
DATA: BEGIN OF OCCURS

END OF ITAB.

4.5 参考已有的表和结构

参考定义
data type table of <structure/table>

4.6 使用结构来继承

使用include structure来继承
DATA:BEGIN OF OCCURS 0
INCLUDE STRUCTURE .
DATA: TYPE .

DATA:END OF .

4.7查看内表属性

通过DESCRIBE获得内表的行
DESCRIBE TABLE LINES N

5.demo
以下分别是标准表,排序表,哈希表的例子。
DATA ITAB7 TYPE STANDARD TABLE OF zschange.
DATA ITAB8 TYPE SORTED TABLE OF ZLLD WITH UNIQUE KEY WERKS.
DATA ITAB9 TYPE HASHED TABLE OF  ZLLD WITH UNIQUE KEY WERKS.
5.1 直接定义

DATA语句用于声明一个内部表。 程序必须告知表的开始和结束位置。 所以使用BEGIN OF语句,然后声明表名。 之后,使用OCCURS添加,后跟一个数字,这里为0. OCCURS告诉SAP正在创建一个内部表,0表示它最初不包含任何记录。 它将随着它填充数据而扩展(0表示0行)。
直接定义(以下的内表是有表头的)

REPORT Z_HELLOWOLD.

DATA: BEGIN OF itab05 Occurs 0,
  field1 type char10,
   field2 type int2,
END OF itab05.
5.2 参考结构

您还可以使用TYPES语句创建内部表作为本地数据类型(仅在当前程序的上下文中使用的数据类型)。
结构定义

TYPES:BEGIN OF TY_itab1,   " 结构类型
   field1 type char10,
   field2 type int2,
  END OF ty_itab1.

TYPES: t_itab1 type TY_itab1 OCCURS 0.  "表类型 
TYPES: t_itab2 type TABLE OF TY_itab1.  "表类型
DATA: itab1 type TABLE OF TY_itab1,    " 三种内表,
      itab2 TYPE t_itab1,
      itab3 type t_itab2.
     
5.3 参考现有的表和结构
 DATA itab4 like itab1.
 DATA ITAB6 TYPE TABLE OF ZLLD. “ZLLD是数据库表
 DATA ITAB7 TYPE STANDARD TABLE OF zschange. " zschange是结构.

以下是本包含一个表的定义

DATA: BEGIN OF lt_rkwa  OCCURS 1.
       INCLUDE STRUCTURE RKWA.
 DATA: MAKTX LIKE MAKT-MAKTX,
       LFA1 LIKE LFA1-NAME1,
       END OF LT_RKWA. 
5.4 根据类型定义成内表和工作区,不用with herder line
TYPES: BEGIN OF ty_item,
         matnr     LIKE marc-matnr,
         maktx     LIKE makt-maktx,
         werks     LIKE marc-werks,
         lifnr     LIKE eina-lifnr,
         name1     LIKE lfa1-name1,
         major     LIKE ztesoppap-major,
         esostu    LIKE ztesoppap-esostu,
         esono     LIKE ztesoppap-esono,
         esodate   LIKE ztesoppap-esodate,
         ppapstu LIKE ztesoppap-ppapstu,
         ppapno    LIKE ztesoppap-ppapno,
         ppapdate  LIKE ztesoppap-ppapdate,
         dled      LIKE ztesoppap-dled,
       END OF ty_item.

DATA: item TYPE STANDARD TABLE OF ty_item ,
       wa_item type ty_item .
6.总结

在实际应用中,我们更喜欢使用第二种。一般不使用带表头的内表。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐