首先用TYPES关键字定义一个与内表相同的结构体
如下:
TYPES: BEGIN OF lt_line,
num TYPE i,
sqr TYPE i,
END OF lt_line.
然后用DATA关键字定义内表和工作区
DATA: lt_itab TYPE STANDARD TABLE OF lt_line WITH HEADER LINE, "定义一个有表头行内表
it_itab TYPE STANDARD TABLE OF lt_line, "定义一个无表头行内表
wa_line TYPE lt_line. "定义一个工作区
注意:或许你看到过这样的代码 如下
DATA: BEGIN OF lt_line OCCURS 10,
num TYPE i,
sqr TYPE i,
END OF lt_line.
实际上这段代码也声明了一个标准内表,并分配了内存大小为10行,OCCURS是ABAP3.0之前声明内表的关键字选项,现在不建议使用。
关键字WITH HEADER LINE也是定义带表头内表的另一种方法。
创建了带表头行的内表之后,可以认为程序中存在两个数据对象,一个是内表,一个是与内表行类型相同的结构体。在所有操作内表的ABAP
语句中,均需要指定工作区。但对于带表头行内表,可以忽略这一指定,系统隐式使用表头行作为工作区,不等于没有用到工作区。不带表头
行的内表没有隐式的工作区,所以要访问没有表头行的内表,必须在相应的ABAP语句中显示指定工作区。
在给内表操作带来方便的同时也增加了混淆,对于既可以操作内表又可以操作工作区的语句来说,有时不能简单的从语法上判断操作对象,需
要进行逻辑分析。如果一个语句中,该名称同时可能代表内表或同名工作区,则需要在内表名称之后加“[ ]”指明当前操作的是内表对象。
上面的定义内表的语句,相当于
DATA lt_line TYPE STANDARD TABLE OF lt_line
WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE 10
WITH HEADER LINE.
类似的还有语句:
TYPES itab TYPE | LIKE linetype occurs n. -> itab是无表头行内表结构体
DATA itab TYPE | LIKE linetype occurs n [WITH HEADER LINE]. ->DATA定义内表,如果没有关键字WITH HEADER LINE的话,虽然有occurs关键字,仍然是无表头行内表。
相当于:
TYPES | DATA itab TYPE|LIKE STANDARD TABLE OF linetype
WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE n
[WITH HEADER LINE].
DATA itab TYPE | LIKE linetype occurs n. ->定义无表头行内表
然而下面语句定义的则是有表头行内表。
DATA: BEGIN OF itab OCCURS 10, ->定义有表头行内表
num TYPE i,
sqr TYPE i,
END OF itab.
关于DATA和TYPES关键字定义变量和结构体的时候所使用的关键字TYPE | LIKE
TYPE | LIKE 就是参照的意思,TYPE ->参照结构体
LIKE ->参照变量