内表:
1:ABAP中有三种类型的内表:
Index Tables | Hashed Table | ||
Table Type | STANDARD TABLE | SORTED TABLE | HASHED TABLE |
通过索引访问 | √ | √ | |
通过键访问 | √ | √ | √ |
KEY 唯一性 | 键不唯一 | 可唯一或不唯一 | 键必须唯一 |
相同值关键字行 | 可从复 | 可从复或不可从复 | 不可从复 |
通常访问方式 | 主要通过索引 | 主要通过关键字 | 只能通过关键字 |
STANDARD TABLE:
DATA ITAB_STANDARD TYPE STANDARD TABLE OF MARA.
SORTED TABLE:
DATA ITAB_SORTED TYPE SORTED TABLE OF MARA WITH NON-UNIQUE KEY TABLE_LINE.
DATA ITAB_SORTED TYPE SORTED TABLE OF MARA WITH NON-UNIQUE KEY TABLE_LINE.
WITH UNIQUE KEY 或WITH NON-UNIQUE KEY 都可以。
HASHED TABLE:
DATA ITAB_HASHED TYPE HASHED TABLE OF MARA WITH UNIQUE DEFAULT KEY.
DATA ITAB_HASHED TYPE HASHED TABLE OF MARA WITH UNIQUE DEFAULT KEY.
只能为WITH UNIQUE KEY。
● SORTED TABLE和HASHED TABLE 必须制定KEY字段的名称如果只是这样写报错:
×DATA ITAB_HASHED TYPE HASHED TABLE OF MARA WITH UNIQUE KEY.
×DATA ITAB_SORTED TYPE SORTED TABLE OF MARA WITH NON-UNIQUE KEY.
2:表关键字
….WITH [UNIQUE|NON-UNIQUE] KEY COMP1……COMPn
….WITH [UNIQUE|NON-UNIQUE] KEY TABLE LINE
如果内表整行都是由基本字段组成的,则可以吧内表整行指定为表关键字。
….WITH [UNIQUE|NON-UNIQUE] KEY DEFAULT KEY
如果不指定任何关键字,则可以使用默认的标准关键字。
3:OCCURS N 的含义
DATA: BEGIN OF ITAB OCCURS 10,
NAME(20) TYPE C,
ADDRESSES TYPE ADDRESS,
END OF ITAB.
NAME(20) TYPE C,
ADDRESSES TYPE ADDRESS,
END OF ITAB.
该语句声明了一个标准内表,OCCURS 10 代表分配初使内存大小为10行
4:内表的初始大小设定
DATA ITAB TYPE STANDARD TABLE OF MARA WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE n
INITIAL SIZE n
● INITIAL SIZE n声明内表的初始大小
WITH HEADER LINE.
先定义工作区与内表:
DATA IT_MARA TYPE STANDARD TABLE OF MARA.tabletable
DATA IS_MARA TYPE MARA.
IS_MARA-MANDT = SY-MANDT.
IS_MARA-MATNR = '000000000000000059'.
IS_MARA-ERSDA = SY-DATUM.
IS_MARA-ERNAM = '44444'.
DATA IS_MARA TYPE MARA.
IS_MARA-MANDT = SY-MANDT.
IS_MARA-MATNR = '000000000000000059'.
IS_MARA-ERSDA = SY-DATUM.
IS_MARA-ERNAM = '44444'.
5:INSERT语句
通过索引插入单行:
INSERT 工作区 INTO 内表 INDEX N.
INSERT IS_MARA INTO IT_MARA INDEX 2.
一般性插入单行的语法:
INSERT 工作区 INTO TABLE 内表.
INSERT IS_MARA INTO TABLE IT_MARA.
加入 TABLE 关键字,对于不同类型的内表,其意义用法是有区别的:
● 对于标准表而言,该形式不指定索引值,附加至表的最后一行,与APPEND语句效果完全一致;
● 对于排序表来说,插入的行不可以打乱按照关键字排序的顺序,否则插入不成功;
● 对于哈希来说,插入过程中系统按照关键字对行进行定位
INSERT INITIAL LINE INTO IT_MARA INDEX 1.
效果是用行结构中各类型的初始值组成数据行添加到内表中。
插入内表
INSERT LINES OF <itab1> [FROM <N1>] [TO <N2>] INTO <itab2> [INDEX <IDX>].
如果没有FROM和TO选项,该语句将整个表格ITAB1附加到ITAB2中。如果使用这些选项,则可通过索引<n1>或<n2>指定ITAB1中要附加的第一行或最后一行。
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA: ITAB1 LIKE LINE OCCURS 10,
ITAB2 LIKE LINE OCCURS 10.
DO 3 TIMES.
LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB1.
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA: ITAB1 LIKE LINE OCCURS 10,
ITAB2 LIKE LINE OCCURS 10.
DO 3 TIMES.
LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB1.
LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX ** 3.
APPEND LINE TO ITAB2.
ENDDO.
INSERT LINES OF ITAB1 INTO ITAB2 INDEX 1.
LOOP AT ITAB2 INTO LINE.
WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.
6:APPEND语句
只能操作索引表(哈希表不是以索引作为行的寻方式,没有系统索引,因此也就不能通过索引进行操作)
APPEND默认插入到最后一行所以不用+ INDEX。
APPEND 工作区 TO 内表.
APPEND IS_MARA TO IT_MARA.
APPEND INITIAL LINE TO IT_MARA(内表).
原理与INSERT 只是 APPEND 是插入到最后一行。
* 附加内表行:
APPEND LINES OF <ITAB1> [FROM <N1>] [TO <N2>] TO <ITAB2>.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论