- SAP ABAP 教程
- SAP ABAP - 首页
- SAP ABAP - 概述
- SAP ABAP - 环境
- SAP ABAP - 屏幕导航
- SAP ABAP - 基本语法
- SAP ABAP - 数据类型
- SAP ABAP - 变量
- SAP ABAP - 常量和字面量
- SAP ABAP - 运算符
- SAP ABAP - 循环控制
- SAP ABAP - 决策
- SAP ABAP - 字符串
- SAP ABAP - 日期和时间
- SAP ABAP - 数据格式化
- SAP ABAP - 异常处理
- SAP ABAP - 字典
- SAP ABAP - 数据域
- SAP ABAP - 数据元素
- SAP ABAP - 表
- SAP ABAP - 结构
- SAP ABAP - 视图
- SAP ABAP - 搜索帮助
- SAP ABAP - 锁对象
- SAP ABAP - 模块化
- SAP ABAP - 子程序
- SAP ABAP - 宏
- SAP ABAP - 函数模块
- SAP ABAP - 包含程序
- SAP ABAP - Open SQL 概述
- SAP ABAP - Native SQL 概述
- SAP ABAP - 内部表
- SAP ABAP - 创建内部表
- ABAP - 内部表填充
- SAP ABAP - 复制内部表
- SAP ABAP - 读取内部表
- SAP ABAP - 删除内部表
- SAP ABAP - 面向对象
- SAP ABAP - 对象
- SAP ABAP - 类
- SAP ABAP - 继承
- SAP ABAP - 多态
- SAP ABAP - 封装
- SAP ABAP - 接口
- SAP ABAP - 对象事件
- SAP ABAP - 报表编程
- SAP ABAP - 对话编程
- SAP ABAP - 智能表单
- SAP ABAP - SAPscript
- SAP ABAP - 客户出口
- SAP ABAP - 用户出口
- SAP ABAP - 业务附加功能
- SAP ABAP - Web Dynpro
- SAP ABAP 有用资源
- SAP ABAP - 问答
- SAP ABAP - 快速指南
- SAP ABAP - 有用资源
- SAP ABAP - 讨论
SAP ABAP - 内部表填充
在内部表中,填充包括选择、插入和追加等功能。本章重点介绍 INSERT 和 APPEND 语句。
INSERT 语句
INSERT 语句用于将单行或多行插入到内部表中。
以下是向内部表添加单行的语法:
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 语句的示例程序。
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。
在执行每个 insert 语句后,系统会重新索引插入行下方的所有行。当您在大型内部表顶部附近插入行时,这会导致开销。如果您需要将一行行插入到大型内部表中,请准备另一个包含要插入行的表,并使用插入行而不是。
在 itable1 的循环中插入 itable1 内的新行时,它不会立即影响内部表。它实际上在下一个循环传递中生效。在插入当前行后的行时,表在 ENDLOOP 处重新索引。sy-tabix 递增,下一个循环处理 sy-tabix 指向的行。例如,如果您在第二个循环传递中并且您在第 3 行之前插入一条记录。当执行 endloop 时,新行变为第 3 行,旧的第 3 行变为第 4 行,依此类推。Sy-tabix 递增 1,下一个循环传递处理新插入的记录。
APPEND 语句
APPEND 语句用于向现有内部表添加单行或一行。此语句将工作区中的单行复制并将其插入到内部表中最后一个现有行之后。工作区可以是标题行,也可以是与内部表行具有相同结构的任何其他字段字符串。以下是用于在内部表中追加单行的 APPEND 语句的语法:
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 变量包含追加行的索引号。
向具有非唯一键的标准表和排序表追加行,无论表中是否已存在具有相同键的行,这都适用。换句话说,可能会出现重复条目。但是,如果用户尝试向具有唯一键的排序表添加重复条目,或者用户通过向其中追加行来违反排序表的排序顺序,则会发生运行时错误。
示例
REPORT ZCUSLIST1.
DATA: BEGIN OF linv Occurs 0,
Name(20) TYPE C,
ID_Number TYPE I,
END OF linv.
DATA table1 LIKE TABLE OF linv.
linv-Name = 'Melissa'.
linv-ID_Number = 105467.
APPEND linv TO table1.
LOOP AT table1 INTO linv.
Write: / linv-name, linv-ID_Number.
ENDLOOP.
以上代码产生以下输出:
Melissa 105467