前言
在abap开发报表程序等时经常需要处理各种系统表中的数据,当处理数据过多时会使程序运行速度变慢。
虽然loop嵌套会使程序速度减慢,但有时是无法避免的,例如通过header处理item中数据。
解决方案
利用二分法查找数据,在大数据量情况下会大幅度提升查找速度。
实例
对工单处理
DATA: gt_afko TYPE STANDARD TABLE OF afko,
gw_afko LIKE LINE OF gt_afko,
gt_afpo TYPE STANDARD TABLE OF afpo,
gw_afpo LIKE LINE OF gt_afpo,
g_index TYPE sy-tabix.
SELECT * FROM afko
INTO TABLE gt_afko
UP TO 5000 ROWS.
SELECT * FROM afpo
INTO TABLE gt_afpo
FOR ALL ENTRIES IN gt_afko
WHERE aufnr = gt_afko-aufnr.
"用二分法必须先排序
SORT gt_afko BY aufnr.
SORT gt_afpo BY aufnr.
LOOP AT gt_afko INTO gw_afko.
"二分法查找
READ TABLE gt_afpo INTO gw_afpo WITH KEY aufnr = gw_afko-aufnr BINARY SEARCH.
IF sy-subrc = 0.
g_index = sy-tabix.
LOOP AT gt_afpo INTO gw_afpo FROM g_index.
IF gw_afpo-aufnr >< gw_afko-aufnr.
EXIT.
ELSE.
"数据处理
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.