SAP ABAP 内部表(Internal Tables)

内部表(Internal Tables)

内部表实际上是一个临时表,其中包含正在执行的 ABAP 程序的记录。内部表仅在 SAP 程序运行期间存在。它们使用 ABAP 语言处理大量数据。当您需要从数据库表中检索数据时,我们需要在 ABAP 程序中声明一个内部表。

内部表中的数据按行和列存储。每行称为,每列称为字段。在内部表中,所有记录都具有相同的结构和键。使用索引或键访问内部表的各个记录。由于内部表在相关程序执行之前一直存在,因此当程序执行终止时,内部表的记录将被丢弃。因此,内部表可以用作临时存储区或临时缓冲区,在那里可以根据需要修改数据。这些表仅在运行时占用内存,而在声明时不占用内存。

内部表仅在程序运行时存在,因此在编写代码时,内部表的结构必须确保程序可以使用它。您会发现内部表的操作方式与结构相同。主要区别在于结构只有一行,而内部表可以根据需要有任意多行。

内部表可以由多个字段组成,对应于表的列,就像在 ABAP 字典中使用多个字段创建表一样。键字段也可以与内部表一起使用,在创建这些内部表时,它们提供了更大的灵活性。对于内部表,可以指定非唯一键,可以存储任意数量的非唯一记录,并可以在需要时存储重复记录。

内部表的大小或包含的行数不是固定的。内部表的大小根据与内部表关联的程序的要求而变化。但建议将内部表保持尽可能小。这是为了避免系统在处理大量数据时运行缓慢。

内部表有多种用途:

  • 它们可用于保存计算结果,以便稍后在程序中使用。
  • 内部表还可以保存记录和数据,以便快速访问,而不必从数据库表访问这些数据。
  • 它们的用途非常广泛。可以使用任何数量的其他已定义结构来定义它们。

内部表的种类

  • 标准表,表类型为关键字 STANDARD TABLE,系统为该表的每一行生成一个逻辑索引。填充标准表时,可以讲数据附加在现有行之后,也可以插入到指定的位置,程序对内表行的寻址操作可以通过索引或者关键字,另外,在对表进行插入,删除等操作时,个数据行在内存中的位置不变,系统仅重新排列个数据行的索引值。

  • 排序表,表类型关键字为 SORTED TABLE,也具有一个逻辑索引,不同之处在于排序表总是按其关键字生序排列以后再存储,其访问方式与标准表相同。

  • 哈希表,表类型关键字为 HASHED TABLE,没有索引,只能通过关键字来访问,系统用哈希算法管理表中的数据,因而其寻址一个数据行的时间与表的大小无关。


表关键字

  • 如果内表行是结构体,则可以指定结构体中的某几个字段作为内表关键字,该字段不能是内表或者引用类型,但可以是嵌套体。
  • 如果内表的整个行都是由基本类型字段组成,则可以把内表整行指定为关键字。
  • 如果不指定任何关键字,则可以使用默认的标准关键字,该选项为默认选项。
  • 扁平结构内表的默认表关键字是非数字和非内表的组件字段,举例来说,一个内表有字段姓名(C 类型),年龄(N 类型)和工资(F 类型),则默认的关键字为姓名和年龄。
  • 如果内表的整个行都是单个基本类型组成,则默认关键字为整个行,如果内表字段含有内表类型字段,则没有默认关键字。