【ABAP系列】SAP ABAP中使用for all entries in小結


公眾號: matinal
本文作者: matinal
 

 

前言部分

大家可以關注我的公眾號,公眾號里的排版更好,閱讀更舒適。

正文部分

ABAP開發中,使用for all entries in語句將不能使用join的聚集表(例如BSEG)或者需要使用select的內表與內表串聯。
以BSEG為例:
select belnr hkont
from bsis
into corresponding fields of table itab1
where ....
if not itab1[] is initial.
select kunnr lifnr belnr
from bseg
into corresponding fields of table itab2
for all entries in itab1
where belnr = itab1-belnr and hkont = itab1-hkont and ....
endif.
由於BESG不能和BSIS做內聯,所以先將BSIS要獲取的內容放到內表itab1中,然后用 for all entries in 來串聯。
注意:
1、必須要判斷for all entries in后面的內表是否為空,如果為空,where條件中與內表中字段進行比較的結果全部為真,會導致取出非常多的數據,影響系統性能。
2、使用for all entries in,對於最后得出的結果集系統會自動刪除重復行(即使用了distinct)。如果要保留重復行記錄,要在SELECT語句中添加足夠的key(有必要時,增加全部key),以保證結果集中所需重復項目不會被刪除。
3、對於內表中作為條件替換用項目,不能使用LIKE,BETWEEN,IN比較操作符。這些比較操作符都是不確定比較操作符(將選擇條件設定在一個范圍內),而 for all entries in 語句的作用相當於將選擇條件塊全部並列開來,用OR連接,如果每個OR分支中又是不確定的范圍,那么系統性能將大大降低。
4、使用該語句時,ORDER BY語句和HAVING語句將不能使用。
5、使用該語句時,除COUNT( * )以外的所有合計函數(MAX,MIN,AVG,SUM)都不能使用。
6、使用 for all entries in 雖然在某些方面很方便的,但很耗內存。
7、itab-field作為占位符被替換,所以定義內表itab時不要使用with header line,以免造成混淆。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM