内表:
1ABAP中有三种类型的内表:
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.
WITH UNIQUE KEY WITH NON-UNIQUE KEY 都可以。
HASHED TABLE:
DATA ITAB_HASHED TYPE HASHED TABLE OF MARA WITH UNIQUE DEFAULT KEY.
只能为WITH UNIQUE KEY
SORTED TABLEHASHED 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
如果不指定任何关键字,则可以使用默认的标准关键字。
3OCCURS N 的含义
DATABEGIN OF ITAB OCCURS 10,
        NAME(20TYPE 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声明内表的初始大小
        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'.
5INSERT语句
通过索引插入单行:
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>].
如果没有FROMTO选项,该语句将整个表格ITAB1附加到ITAB2中。如果使用这些选项,则可通过索引<n1><n2>指定ITAB1中要附加的第一行或最后一行。
DATABEGIN 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-INDEXLINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB1.

  LINE-COL1 = SY-INDEXLINE-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.
6APPEND语句
只能操作索引表(哈希表不是以索引作为行的寻方式,没有系统索引,因此也就不能通过索引进行操作)
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小时内删除。