ABAP编程中提高执行效率的几个技巧
ABAP编程是高级商业应用程序编程语言,由SAP公司开发,用于应用程序的交互式开发。随着系统的运行,系统中的数据量会越来越大,这就对程序的运行速度产生很大的影响,甚至有些程序运行时会因超时而被数据库踢掉,这时就需要考虑对程序进行优化了。下面是提高执行效率的几个技巧:
1. 尽量不要用Select-End Select语句
在大数据量处理的程序中,要避免用Select-End Select语句,该语句会严重影响程序运行速度。在整个运行过程中,Select-End Select语句是保持数据库连接的,相当于在一个Loop中反复访问数据库,加重了数据库的负荷。可用以下语法代替,效率会更高:
DATA: BEGIN OF itab OCCURS 0,
bukr_s TYPE bkpf-bukr_s,
bel_nr TYPE bkpf-bel_nr,
gja_h TYPE bkpf-gja_h,
END OF itab.
SELECT bukr_s bel_nr gja_h INTO TABLE itab FROM bkpf WHERE <condition>.
2. 用Join表连接
如果数据来源为多个表时,可用关联语句将几个表按关键字关联起来。不过要注意:如果涉及到的数据来源表为簇表,則不能用Join连接,如表Bseg(会计核算凭证段);当有多种关联方法时,应尽量使用关联表数量较少的方法。
3. For All Entries In
对于不能Join关联的表,如Bseg,可使用For All Entries In语句将该表与内表串联。但要注意以下几点:
(1)必须要判断For All Entries In后面的内表是否为空,如果它为空的话,那么在where条件中的与内表中字段进行比较的结果全部为真,也就是全部满足条件,这会导致取出非常多的数据,极大地影响系统的性能。
(2)该语句会自动删除重复行,所以取数时尽量把主键都考虑上。例如:
SELECT bukr_s bel_nr gja_h buzeishkzg wr bt
FROM bseg
INTO TABLE itab1
FOR ALL ENTRIES IN itab2
WHERE bel_nr = itab2-bel_nr
AND bukr_s = itab2-bukr_s
AND gja_h = itab2-gja_h
AND hkont IN gr_r_acct.
(3)数据量大的时候用For All Entries In效率会比较低,因为系统里面的处理就像两个SelECT语句循环,其原理等同于Where字句后用Or条件,会占用大量内存,不如一次选出,然后用Delete筛选。
4. 多用内表处理数据减少对数据库的访问
通过上述几个技巧,可以提高ABAP编程的执行效率,从而提高系统的性能。