内部表用于从固定结构中获取数据,以便在 ABAP 中动态使用。内部表中的每一行都具有相同的字段结构。内部表的主要用途是用于在程序中存储数据库表中的数据并设置其格式。
在本教程中,您将学习:
工作区是单行数据。它们应具有与任何内部表相同的格式。它用于一次处理一行内部表中的数据。
内部工作台和工作区之间的区别 ?
有两种类型的内部表。
带标题行的内部表
不带标题行的内部表格 :
创建内部表
创建内部表的方法有很多种。让我们一一一看——
1.By 使用类型语句
现在,让我们使用 TYPE 语句创建一个内部表 itab。
语法是 –
Types : begin of line,
column1 type I,
column2 type I,
end of line.
例:
TYPES : begin of line,
empno type I,
empname(20) type c ,
end of line.
TYPES 语句创建定义的结构线。
要实际创建内部表,请使用以下命令-
Data itab type line occurs 10.
使用线条结构创建内部表。 除了声明内部表的结构外,OCCURRENCE 子句还定义了在主存储中维护的表条目数(在本例中为 10)。额外的记录被写出到分页区域,并可能影响性能
2.By 引用另一个表
您可以通过引用现有表来创建内部表。现有表可以是标准 SAP 表、Z 表或其他内部表。
语法-
Data [with header line].
示例-
DATA itab TYPE line OCCURS 10 with header line.
这里创建了一个带有标题行的类型行的内部表 itab。请注意,“带标题行”是可选的。
3.By 参考现有结构
语法-
Data LIKE occurs n [with header line].
示例-
DATA itab LIKE sline OCCURS 10.
这里创建了一个与斜线结构相同的表itab
4.By 创建新结构
现在,让我们使用自己的结构创建一个内部表。默认情况下,此处使用标题行创建表。
语法 –
Data : Begin of occurs ,
,
.................................,
End of .
示例 –
Data : Begin of itab occurs 10,
column1 type I,
column2(4) type C,
column3 like mara-ernam,
End of itab.
创建内部表
现在我们已经成功创建了一些内部表,让我们看看如何用一些记录填充它们。有多种方法可用于填充表
1.逐行追加数据
第一种可用的方法是使用 APPEND 语句。
使用 APPEND 语句,我们可以将另一个工作区中的一行添加到内部表中,也可以向内部表添加一个初始行。
语法 –
APPEND [ TO / INITIAL LINE TO] .
此处的工作区域或初始行附加到内部表<可编辑>。
系统变量 SY-TABIX 包含追加行的索引。
例:
Data: Begin of itab occurs 10,
col1 type C,
col2 type I,
end of itab.
Append initial line to itab.
结果 : ’ ’ ‘0’
初始行将使用其类型的正确值初始化的行添加到表中。这里,col1 是一个字符,col2 是一个整数。然后附加初始行,添加一行相对于列的数据类型初始化的行,即col1的空间和col2的0空间。
2.使用收集语句
COLLECT 是用于填充内部表的另一种形式的语句。通常,COLLECT 是在将行插入具有唯一标准键的内部表中时使用的。
可以用来计算节点
语法-
COLLECT [ INTO] .
对于带有标题行的表,将省略 INTO 选项。假设已经有一个条目具有与您尝试追加的条目相同的键,则不会向表中添加新行,但会添加这两个条目的数值字段,并且只存在一个与该键对应的条目。SY-TABIX 的值将更改为原始条目所在的行。否则 COLLECT 的行为类似于 APPEND,SY-TABIX 包含已处理行的索引。
3.使用 INSERT 语句
INSERT 语句将行/工作区添加到内部表中。可以通过将 INDEX 子句与 INSERT 语句一起使用来指定要添加新行的位置。
语法
INSERT [ INTO / INITIAL LINE INTO] [index ].
在这里,工作区 & lt ; wa & gt ; 或 INITIAL LINE 入到索引 & lt ; idx & gt ; 处的内部表中 & lt ; 可编辑 & gt ; 。
复制内部表
可以使用 APPEND LINES 或 INSERT LINES 语句将一个内部表的内容复制到另一个内部表。更简单的方法是使用以下语法。
MOVE To .
OR
= .
它们将 ITAB1 的内容复制到 ITAB2。对于带有标题行的内部表格,我们必须使用[]来区分工作区。因此,要复制带有标题行的内部表的内容,语法变为,
itab1[] = itab2[].
我们现在熟悉了内部表的创建和用数据填充它们。现在,我们将了解如何实际使用数据或从内部表中检索数据。
1. 使用循环-尾环
访问或读取内部表的方法之一是使用 LOOP-ENDLOOP。
语法
LOOP AT [INTO ]
...................................
ENDLOOP.
在这里,当您说LOOP AT ITABLE时,则内部表ITABLE将逐行读取。您可以在 LOOP-ENDLOOP 结构的任何部分访问该行的列的值。SY-SUBRC 的值设置为 0,即使只读取一条记录也是如此。
2. 使用读取
读取内部表的另一种方法是使用 READ 语句。
语法-
READ TABLE [INTO ] INDEX .
此语句读取索引 指定的当前行或行。SY-TABIX 的值是行读取的索引。如果找到具有指定索引的条目,则 SY-SUBRC 设置为 0。如果指定的索引小于 0,则会发生运行时错误。如果指定的索引超过表大小,则 SY-SUBRC 设置为 4。
有许多方法可以从内部表中删除行。
1.删除循环中的行。
这是删除行的最简单方法。
语法
DELETE .
此语句仅在循环中起作用。它将删除当前行。可以通过添加 WHERE 子句有条件地删除循环中的行。
2.使用索引删除行。
这用于从任何已知索引的内部表中删除行。
语法
DELETE INDEX .
索引为 IDX 的行将被删除。以下行的索引递减 1。
参考:https://www.guru99.com/all-about-sap-internal-tables.html