SAP ABAP 填充内部表

在内部表中,填充包括选择、插入和附加等功能。本章重点介绍 INSERTAPPEND 语句。


INSERT 语句

INSERT 语句用于将单行或一组行插入到内部表中。

以下是向内部表中添加单行的语法:

  1. INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

在此语法中,INSERT 语句在内部表 internal_tab 中插入新行。通过在表达式中使用 work_area_itab INTO,可以在 internal_tab 参数之前插入新行。使用 work_area_itab INTO 表达式时,新行取自 work_area_itab 工作区,并插入到 internal_tab 表中。但是,当 work_area_itab INTO 表达式不用于插入行时,该行取自 internal_tab 表的标题行。

当使用 INDEX 子句在内部表中插入新行时,插入行之后的行的索引号将增加 1。如果内部表包含 <index_num> - 1 行,则新行将添加到表的末尾。当 SAP 系统成功地向内部表添加一行时,SY-SUBRC 变量设置为 0。

实例

下面是使用 INSERT 语句的实例程序。

  1. REPORT ZCUSLIST1.
  2. DATA: BEGIN OF itable1 OCCURS 4,
  3. F1 LIKE SY-INDEX,
  4. END OF itable1.
  5. DO 4 TIMES.
  6. itable1-F1 = sy-index.
  7. APPEND itable1.
  8. ENDDO.
  9. itable1-F1 = -96.
  10. INSERT itable1 INDEX 2.
  11. LOOP AT itable1.
  12. Write / itable1-F1.
  13. ENDLOOP.
  14. LOOP AT itable1 Where F1 3.
  15. itable1-F1 = -78.
  16. INSERT itable1.
  17. ENDLOOP.
  18. Skip.
  19. LOOP AT itable1.
  20. Write / itable1-F1.
  21. ENDLOOP.

结果如下:

  1. 1
  2. 96-
  3. 2
  4. 3
  5. 4
  6. 1
  7. 96-
  8. 2
  9. 78-
  10. 3
  11. 78-
  12. 4

DO 循环附加了 4 行,其中包含数字 1 到 4。标题行组件 itable1-F1 的值为 -96。Insert 语句将标题行作为新行插入到第 3 行之前的主体中。插入后,现有的第 3 行变为第 4 行。循环 LOOP AT 语句从内部表中检索 F1 值大于或等于 3 的行。在每行之前,Insert 语句从其标题行插入新行。在插入之前,F1 组件已更改为包含 -78。

在执行每个 insert 语句后,系统 重新索引 插入语句下方的所有行。当您在大型内部表的顶部附近插入行时,会影响性能。如果需要在大型内部表中插入行块,请用要插入的行准备另一个表,并改用插入行。

当在 itable1 的循环内的 itable1 内插入新行时,它不会立即影响内部表。它实际上在下一个循环过程中生效。在当前行之后插入行时,表在 ENDLOOP重新索引sy-tabix 递增,下一个循环处理 sy-tabix 指向的行。例如,如果您在第二个循环过程中,并且在第 3 行之前插入了一条记录。执行 endloop 时,新行变为第 3 行,旧行变为第 4 行,依此类推。 Sy-tabix 增加 1,下一个循环过程处理新插入的记录。


APPEND 语句

APPEND 语句用于向现有内部表中添加单行。此语句从工作区复制一行,并将其插入内部表中最后一行的后面。工作区可以是标题行,也可以是与内部表的行具有相同结构的任何其他字段字符串。

下面是 APPEND 语句的语法,用于在内部表中追加单行:

  1. APPEND <record_for_itab> TO <internal_tab>.

在这种语法中,<record_for_itab> 表达式可以由 <work_area_itab> 工作区表示,该工作区可以转换为行类型或 INITIAL LINE 子句。如果用户使用 <work_area_itab> 工作区,则 SAP 系统会在 <internal_tab> 内部表中添加一行,并用工作区的内容填充该行。INITIAL LINE 子句附加一个空行,其中包含表结构每个字段的初始值。在每个 APPEND 语句之后,SY-TABIX 变量包含追加行的索引号。

无论表中是否已经存在具有相同键的行,都可以使用非唯一键将行追加到标准表和排序表中。换句话说,可能会出现重复条目。但是,如果用户试图使用唯一键向排序表中添加重复条目,或者用户通过在排序表中添加行来违反排序顺序,则会发生运行时错误。

实例
  1. REPORT ZCUSLIST1.
  2. DATA: BEGIN OF linv Occurs 0,
  3. Name(20) TYPE C,
  4. ID_Number TYPE I,
  5. END OF linv.
  6. DATA table1 LIKE TABLE OF linv.
  7. linv-Name = 'Melissa'.
  8. linv-ID_Number = 105467.
  9. APPEND linv TO table1.
  10. LOOP AT table1 INTO linv.
  11. Write: / linv-name, linv-ID_Number.
  12. ENDLOOP.

结果如下:

  1. Melissa 105467

分类导航