1. 某公司增强中大量使用了FOR all entries.非常影响效率。随着数据量的增大,会越来越慢。而且用二分法也不能解决问题。
2. 建议用LOOP和ENDLOOP来写,示例如下:
现在的写法:(当LIPS-VGBEL=WA_VBAP-vbeln, 从LIPS中取VBELN和POSNR到WA_VBAP-vbeln,WA_VBAP-POSNR)
SELECT vbeln posnr
FROM lips INTO TABLE it_lips
For All Entries IN it_vbap
WHERE vgbel = it_vbap-vbeln.
LOOP AT it_vbap INTO wa_vbap.
READ TABLE it_lips INTO wa_lips WITH KEY vgbel = wa_vbap-vbeln
vgpos = wa_vbap-vgpos.
IF sy-subrc = 0.
wa_vbap-vbeln_vl = wa_lips-vbeln.
wa_vbap-posnr_vl = wa_lips-posnr.
MODIFY it_vbap FROM wa_vbap.
ENDIF.
ENDLOOP.
推荐写法:
LOOP AT it_vbap INTO wa_vbap.
SELECT SINGLE vbeln posnr
FROM lips INTO (wa_vbap-vbeln_vl, wa_vbap-posnr_vl)
WHERE vgbel = wa_vbap-vbeln.
MODIFY it_vbap FROM wa_vbap.
ENDLOOP.
3. 由于对代码改动量太大,建议先对部分代码进行测试。在两个表数据量大于10万条的情况下有较好的效果。