内表定义
内表是SAP ABAP中最具有影响力且最重要的功能之一,简而言之,用一句话概括内表的定义就是:***内表是可以在程序内部定义并且使用的表,属于本地表。***如下图展示出了参照数据库表sflight定义的内表的结构
内表与数据库表区别
内表和数据库表的很大区别在于:数据库表中存放的数据是永久的;而内表是动态数组,内表中存放的数据是临时的,只有当执行程序时才会占用内存,程序关闭时即释放内存。内表可以包含的数据件数为内存大小所限制。
内表的作用
一般来说针对数据库表中数据的操作,都要首先将数据库表中数据输出到内表中,再通过内表对数据进行处理,最后再更新回数据库表中,在这过程中,内表相当于起到一个中间桥梁的作用,极大地保护了数据库表中数据的安全性。
内表的分类
在SAP ABAP中内表有三种类型,它们分别是标准表,排序表以及哈希表,下面将依次介绍三种表
标准表
标准表是有顺次索引的树型结构内表,是利用索引查找内表行数据时易于使用的内表类型。标准表的关键字并非唯一,即标准表中不能使用WITH UNIQUE语句,只能使用WITH NON-UNIQUE语句。
排序表
排序表是已经按照关键字排序好的内表类型,其拥有索引,也拥有关键字,可以通过索引或者关键字查询对应的行数据。与标准表不同,排序表可使用WITH UNIQUE语句且自带BINARY SEARCH(二分查找)功能。又因为排序表已经排序,所以使用SORT语句会报错。
哈希表
哈希表没有顺次索引,只能用哈希值计算出的KEY值进行检索,哈希值用于直接读取哈希算法算出的内存地址中存储的数据。哈希表一定要使用WITH UNIQUE语句指定关键字。
不同内表速度比较及适用场景
为了更加直观地展现三种内表的速度和适用场景,将其制作成比较表展现如下:
语句 | 标准表 | 排序表 | 哈希表 |
---|---|---|---|
READ语句速度比较 | 速度慢 | 速度快 | 速度最快 |
APPEND语句速度比较 | 速度快 | 速度最慢 | 速度慢 |
用索引访问(INDEX Access) | 是 | 是 | 不是 |
用关键字访问(KEY Access) | 是 | 是 | 是 |
关键字(KEY VALUES) | 不唯一 | 唯一或者不唯一 | 唯一 |
建议使用的访问方法 | 索引访问 | 关键字访问 | 只能使用关键字访问 |