ABAP中填充内表之附加行

来源:互联网 发布:apache cxf 编辑:程序博客网 时间:2024/04/30 09:12

要逐行填充 内表,可以 使用 APPEND、 COLLECT 或 INSERT 语句。

_  要将内表 仅用于存储 数据,出于 性能方面的 考虑,建议 使用 APPEND。 用 APPEND 也可以创建 序列清单。

_  要计算数 字字段之和 或要确保内 表中没有出 现重复条目 ,请使用 COLLECT 语句,它根 据标准关键 字处理行。

_  要在内表 现有行之前 插入新行, 请使用 INSERT 语句。

要将内表内 容复制到另 一个内表中 ,请使用 APPEND、 INSERT 或 MOVE 语句的变式 。

_  要将内表 行附加到另 一个内表中 ,请使用 APPEND 语句的变式 。

_  要将内表 行插入另一 个内表中, 请使用 INSERT 语句的变式 。

_  要将内表 条目内容复 制到另一个 内表中,并 且覆盖该目 标表格,请 使用 MOVE 语句。

关于如何使 用 SELECT 语句用数据 库表格中的 数据填充内 表的详细信 息,参见 将数据读入内表

附加行

要将行附加 到内表中, 请使用 APPEND 语句,用法 如下:

语法

APPEND [<wa> TO|INITIAL LINE TO] <itab>.

该语句将新 行附加到内 表 <itab> 中。

通过使用 <wa> TO 选项,指定 要附加的源 区域 <wa>。 对于带表头 行的表格, 可以忽略 TO 选项。这样 ,表格工作 区域就成了 源区域。

可以使用 INITIAL LINE TO 选项替代 <wa> TO,将用 其类型的正 确值初始化 的行添加到 表格中。

APPEND 不考虑是否 存在标准关 键字相同的 行(参见标识表格行) 。这样,可 能会出现相 同条目。

系统字段 SY-TABIX 在每个 APPEND 语句之后包 含附加行的 索引。

DATA: BEGIN OF ITAB OCCURS 10,
        COL1 TYPE C,
        COL2 TYPE I,
      END OF ITAB.

DO 3 TIMES.
  APPEND INITIAL LINE TO ITAB.
  ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX ** 2.
  APPEND ITAB.
ENDDO.

LOOP AT ITAB.
  WRITE: / ITAB-COL1, ITAB-COL2.
ENDLOOP.

本示例创建 带表头行和 两列的内表 ITAB。 表格用 DO 循环填充。 每次通过循 环时附加初 始化行,然 后用循环索 引填充表格 工作区域并 且附加循环 索引的平方 根。其输出 为:

          0

1         1

          0

2         4

          0

3         9

DATA: BEGIN OF LINE1,
         COL1(3) TYPE C,
         COL2(2) TYPE N,
         COL3    TYPE I,
      END OF LINE1.

DATA TAB1 LIKE LINE1 OCCURS 10.

DATA: BEGIN OF LINE2,
         FIELD1(1)  TYPE C,
         FIELD2     LIKE TAB1,
      END OF LINE2.

DATA  TAB2 LIKE LINE2 OCCURS 1.

LINE1-COL1 = 'abc'. LINE1-COL2 = '12'. LINE1-COL3 = 3.
APPEND LINE1 TO TAB1.

LINE1-COL1 = 'def'. LINE1-COL2 = '34'. LINE1-COL3 = 5.
APPEND LINE1 TO TAB1.

LINE2-FIELD1 = 'A'. LINE2-FIELD2 = TAB1.
APPEND LINE2 TO TAB2.

REFRESH TAB1.

LINE1-COL1 = 'ghi'. LINE1-COL2 = '56'. LINE1-COL3 = 7.
APPEND LINE1 TO TAB1.

LINE1-COL1 = 'jkl'. LINE1-COL2 = '78'. LINE1-COL3 = 9.
APPEND LINE1 TO TAB1.

LINE2-FIELD1 = 'B'. LINE2-FIELD2 = TAB1.
APPEND LINE2 TO TAB2.

LOOP AT TAB2 INTO LINE2.
   WRITE: / LINE2-FIELD1.
   LOOP AT LINE2-FIELD2 INTO LINE1.
      WRITE: / LINE1-COL1, LINE1-COL2, LINE1-COL3.
   ENDLOOP.
ENDLOOP.

其输出为:

A

abc 12          3

def 34          5

B

ghi 56          7

jkl 78          9

本示例创建 两个不带表 格工作区域 的内表(TAB1 和 TAB2) 。TAB2 有深层结构 ,因为 LINE2 的第二个组 件包含内表 TAB1 的结构。LINE1 被填充并附 加到 TAB1。 然后,将 LINE2 填充并附加 到 TAB2。 用 REFRESH 语句清除 TAB1 之后(参见 初始化内表  ),再重复 相同步骤。 请注意, TAB2 中的行数仅 在 OCCURS 参数中指定 为1。TAB2 的内容输出 。

下篇提示:要创建内表数据类型,请使用TYPES语句,用法如下: 语法 TYPES<t><type>OCCURS<n>. 该语句通过使用TYPES语句的OCCURS选项创建一个内表数据类型<t>。内表中行的数据类型在<type>中指定。要指定行的数据类型,可以使用TYPE或 ...