有两个内部表:IT_TAB1(假设N条记录),I T_TAB2(假设M条记录)。
I T_TAB1的结构如下
ID BUKRS BELNR DMBTR
001 A001 1000000010 10000
002 A001 1000000020 20000
…… …… …… ……
I T_TAB2的结构如下
BUKRS BELNR
A001 1000000010
A001 1000000050
…… ……
要求是根据内部表ITAB2对内部表ITAB1进行删除处理,ITAB1中BELNR项与ITAB2中BELNR项相同的全部删除掉,该事例中所得结果应为:
I T_TAB1的结构如下
ID BUKRS BELNR DMBTR
002 A001 1000000020 20000
…… …… …… ……
外层循环IT_TAB2,里层循环IT_TAB1。
此种方法被一般ABAP开发规约所禁止。
三种方法中,执行时间排第二。
方法二:利用RANGE TABLE
将IT_TAB2导入RANGE TABLE,
在条件中使用IN语句来删除IT_TAB1.
此种方法,由于RANGE TABLE的做成使用了一回循环,
再加上用IN 语句删除,相当于使用了两次循环,所以速度比较慢,
三种方法中,执行时间排第三。
另外此法只适用于比较项目(例如IT_TAB2-BELNR)只有一项时,
而且,作为比较项目的该项值被反复使用时(假设还有内部表IT_TAB3,IT_TAB4…都需要根据IT_TAB2中的BELNR项来作相应处理时),
采用该法,才更显效率。
如果比较项目为复数项时,请使用其他两种方法。
方法三:并行算法
使用该算法,要事先对两个内部表进行排序,
然后两层循环嵌套,
外层是IT_TAB2,里层是IT_TAB1。
与方法一不同的是,
方法一的执行次数为(N * M),方法三的执行次数为( N + M )。
所以该方法在三种方法中,执行时间排第一。
但使用该算法有一个条件限制,
就是IT_TAB1中的记录一定要在IT_TAB2所包含的记录范围内。
嵌套循环时推荐尽可能使用该平行算法。
该法缺点是:1.使用限制条件要判断准确。
2.代码可读性差。