ABAP内表(Internal Table)的定义及使用(一)

一、Internal Table的定义

1. 概念

Internal Table中文成为内表,是ABAP中一种比较特殊的数据对象,它用于存储数据集,一行一行存储某一固定格式的数据。数据集中中每一个行的每一个数据对象都可以访问。内表中的一行称作 Table Line或Table Entry。内表的行数可以自动扩展,其最大行数的限制依赖于系统的参数设定。内表结构可以包含一个单独的数据元素,一个结构也可以是一个内表,甚至更复杂。

abap-3-1

内表的定义由以下方面完全定义:
Line type: 行的数据结构中每一列的属性,一般用structure type指定line type,实际上任意数据类型都可以。
Key definition: key列及其顺序的定义被用于鉴别内表中不同的行,内表中的key列可以定义为unique 或non-unique,这一点取决于我们访问内表的方式。如果是unique的,内表中所有行不能出现相同Key值的字段。
Access type: key access方式是指我们访问内表时通过key列的内容查询数据;index access方式是指我们通过行的顺序编号访问相应的行(并不是所有类型的内表都可以这样访问)
Table kind: Standard tables, Sorted tables, Hashed tables,这三种类型的内表在key列的设置、Access type有所不同,各有特点,使用的时候需要根据逻辑特性选择相应的类型。

abap-3-2

Standard tables: 在这种内表中,系统会自动为每一行数据编号,我们可以通过index 和 key两种方式访问某一行。
Sorted tables: 在这种内表中,数据总是按照key字段排序后保存的,我们也可以通过index 和 key两种方式访问某一行。
Hashed tables: 在这种内表中,数据记录的管理方法是为了运行时优化,定义这种表的时候key列必须是unique的,访问的时候也只能通过key access访问。

从三种类型内表(Internal table)的特性中我们可以推断,当我们的程序对一个内表进行的访问大多数情况下是逐行处理,使用standard table就足够了;如果需要对一个内表的数据进行固定顺序排序,并且多数情况下通过key 访问,选用sorted table比较好;第三种情况,如果内表仅用于根据key列查询,我们应该选用Hashed table,可以极大的提高性能,尤其是在数据量较大或查询频繁的程序中。