插入语句
INSERT 语句用于将单行或一组行插入到内表中。
以下是将单行添加到内部表的语法 -
INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.
在此语法中,INSERT 语句在internal_tab 内部表中插入新行。可以通过在internal_tab 参数之前使用work_area_itab INTO 表达式插入新行。当使用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 语句的示例程序。
REPORT ZCUSLIST1.
DATA: BEGIN OF itable1 OCCURS 4,
F1 LIKE SY-INDEX,
END OF itable1.
DO 4 TIMES.
itable1-F1 = sy-index.
APPEND itable1.
ENDDO.
itable1-F1 = -96.
INSERT itable1 INDEX 2.
LOOP AT itable1.
Write / itable1-F1.
ENDLOOP.
LOOP AT itable1 Where F1 ≥ 3.
itable1-F1 = -78.
INSERT itable1.
ENDLOOP.
Skip.
LOOP AT itable1.
Write / itable1-F1.
ENDLOOP.
上面的代码产生以下输出 -
1
96-
2
3
4
1
96-
2
78-
3
78-
4
在上面的示例中,DO 循环将包含数字 1 到 4 的 4 行附加到其中。标题行组件 itable1-F1 已分配值 -96。Insert 语句将标题行作为新行插入到正文中的第 3 行之前。插入后,现有的第 3 行将成为第 4 行。LOOP AT 语句从内表中检索 F1 值大于或等于 3 的行。在每行之前,Insert 语句从其标题行插入一个新行。在插入之前,F1 组件已更改为包含 -78。
执行每条插入语句后,系统都会重新索引插入的行下面的所有行。当您在大型内部表顶部附近插入行时,这会带来开销。如果需要将行块插入到大型内部表中,请准备另一个包含要插入的行的表并使用插入行。
当在 itable1 的循环内向 itable1 插入新行时,它不会立即影响内部表。它实际上在下一个循环传递时生效。在当前行之后插入行时,表会在 ENDLOOP 处重新索引。sy-tabix 递增,下一个循环处理 sy-tabix 指向的行。例如,如果您在第二个循环中,并且在第 3 行之前插入一条记录。执行 endloop 时,新行将变为第 3 行,旧行 3 将变为第 4 行,依此类推。Sy-tabix 加 1,下一个循环将处理新插入的记录。