理论教育 ABAP语言中的表类型介绍与应用

ABAP语言中的表类型介绍与应用

时间:2023-05-30 理论教育 版权反馈
【摘要】:ABAP中的不同表类型提供了不同场景下的最佳访问性能,因此只需要在不同的场景下选择不同类型的内表即可,这看起来并不是一件十分困难的事情。总体来说,ABAP提供了以下几种类型的内表。根据该字段或该字段的前面某一部分进行访问的速度要大大高于标准表。

ABAP语言中的表类型介绍与应用

在BW数据仓库中,通常是在用户出口或BADI增强中对数据进行处理,而不是自己编写整段代码来进行自定义的开发,因此只是在数据处理的几个不同的点对数据和内表进行读写操作。ABAP中的不同表类型提供了不同场景下的最佳访问性能,因此只需要在不同的场景下选择不同类型的内表即可,这看起来并不是一件十分困难的事情。

总体来说,ABAP提供了以下几种类型的内表。

1.标准内表

标准内表(STANDARD TABLE)既不限制排序字段,也不限制访问方式,因此可以在任何场景、任何地方,对标准内表进行任何字段的排序或根据任何一个字段进行随机访问或随意地插入一条新的数据。

正是由于这样的灵活性,给系统的性能带来了负面影响,降低了标准表的访问速度。尤其需要指出的是,标准表的读取速度十分低下,因为为了寻找到需要的记录,很可能整个表的内容都需要遍历一次。

2.排序表

排序表(SORTED TABLE)是根据一个特定的字段进行了排序的内表。排序字段不需要唯一,也就是说允许重复。根据该字段或该字段的前面某一部分进行访问的速度要大大高于标准表。但是,如果不根据该字段进行访问,则其速度和标准表相差无几。需要说明的是,虽然读取速度相对较快,但是内表的数据插入相对标准表要慢一些,因为系统需要寻找到该条数据插入的详细排序位置。

排序表有两大好处,一是有相同键值的数据记录会被自动避免;二是基于某个字段的内表循环处理(LOOP AT)尤为快速。对于排序表最关键的就是排序字段,用户必须保证所有对于排序表的访问都是基于该排序字段进行的。示例:有一个排序表L_T_SORTDEMO,其有4个字段,分别是C1、C2、C3和C4,其中C1是排序字段,那么在相同目标数据量的情况下,语句:

要比以下代码段的性能有显著提升:(www.daowen.com)

在第一种情况下,系统根据排序字段能够进行精确地查找,读取所有符合条件的内表行,直到C1的值不等于“XYZ”为止,因为有了排序,所以该过程能够迅速完成。

在第二种情况下,系统需要对内表的每条行明细进行读取和比较,直到整个内表读取和比较完毕为止,因此大大降低了程序处理的性能。

3.哈希表

哈希表(HASHED TABLE)在BW数据仓库的增强程序处理中尤为重要,因此必须熟练地掌握该种表类型。哈希表在内表定义时,就指定了需要访问的一个或几个字段作为键值。与标准表和排序表不同的是,哈希表的访问采用索引的方式进行,对某个单独数据条目的访问能够通过指定的字段在近乎一定的时间内完成,该时间甚至不受表条目总数的影响。这个属性对于BW来说相当有用,因为用户只是在增强程序的某个点或某些点对内表数据进行访问,而数据量的大小事先也不能准确得知。

示例:上载成本中心行项目交易数据,此时系统提供了成本中心的信息,假设系统本身并没有提供利润中心的信息,就需要从成本中心的主数据中读取利润中心的信息,语句如下。

看起来,数据表L_T_COSTCENTER包含数千条数据,但是对于数据表的读取却只是在出口的特定地点。如果用户有成千上万的数据需要处理,那么就需要进行成千上万的READ TABLE操作。因此,最好使用哈希表进行数据的处理,因为每次读取时都只是按照关键字段进行访问。

对于该哈希表的定义如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈