For all entries使用中注意的問題
阿新 • • 發佈:2019-01-08
1.SELECT CARRID
CONNID
FLDATE
PRICE
FROM SFLIGHT
INTO TABLE GT_tab
FOR ALL ENTRIES IN GT_SFLIGHT
WHERE CARRID = GT_SFLIGHT-CARRID
AND CONNID = GT_SFLIGHT-CONNID.
在 WHERE 條件中,GT_SFLIGHT-CARRID和GT_SFLIGHT-CONNID這些列將用作佔位符。該 SELECT 語句的結果集是 SELECT 語句的所有結果集的聯合,這些結果集是用內部表 GT_SFLIGHT 中的相應值在每一行上替換佔位符的結果。
2.使用該語句,對於最後得出的結果集系統會自動刪除重複行,也就是distinct的問題。因此如果你要保留重複行記錄時,記得在SELECT語句中新增足夠鍵值專案,以保證結果集中所需重複專案不會被刪除。 3.FOR ALL ENTRIES IN後面使用的內表itab如果為空,系統將視為無條件選取,將當前CLIENT下所有記錄選出。因此為避免無意義的全件檢索,在使用該語句前一定要判斷內部表itab是否為空,為空時不執行包含該語句的資料庫檢索處理。 4.由於itab-f實際上是作為佔位符被替換,所以內部表itab中不要包含HEADER行,以免造成混淆,檢索出錯。 5.內部表itab中作為條件替換用專案的型別和長度,一定要和檢索資料庫中對應的專案相同,否則編譯不能通過。 6.對於內部表itab中作為條件替換用專案,不能使用LIKE,BETWEEN,IN比較操作符。因為這些比較操作符都是不確定比較操作符(將選擇條件設定在一個範圍內),而FOR ALL ENTRIES IN語句的作用相當於將選擇條件塊全部並列開來,用OR連線,如果每個OR分支中又是不確定的範圍,那麼系統性能將大大降低,因此R/3系統在使用該語句時禁止使用不確定比較操作符。 7.使用該語句時,ORDER BY語句和HAVING語句將不能使用。 8.使用該語句時,除COUNT( * )以外的所有合計函式(MAX,MIN,AVG,SUM)都不能使用。 9.使用時,最好先按照選擇條件欄位排序,這樣會改善performance.
2.使用該語句,對於最後得出的結果集系統會自動刪除重複行,也就是distinct的問題。因此如果你要保留重複行記錄時,記得在SELECT語句中新增足夠鍵值專案,以保證結果集中所需重複專案不會被刪除。 3.FOR ALL ENTRIES IN後面使用的內表itab如果為空,系統將視為無條件選取,將當前CLIENT下所有記錄選出。因此為避免無意義的全件檢索,在使用該語句前一定要判斷內部表itab是否為空,為空時不執行包含該語句的資料庫檢索處理。 4.由於itab-f實際上是作為佔位符被替換,所以內部表itab中不要包含HEADER行,以免造成混淆,檢索出錯。 5.內部表itab中作為條件替換用專案的型別和長度,一定要和檢索資料庫中對應的專案相同,否則編譯不能通過。 6.對於內部表itab中作為條件替換用專案,不能使用LIKE,BETWEEN,IN比較操作符。因為這些比較操作符都是不確定比較操作符(將選擇條件設定在一個範圍內),而FOR ALL ENTRIES IN語句的作用相當於將選擇條件塊全部並列開來,用OR連線,如果每個OR分支中又是不確定的範圍,那麼系統性能將大大降低,因此R/3系統在使用該語句時禁止使用不確定比較操作符。 7.使用該語句時,ORDER BY語句和HAVING語句將不能使用。 8.使用該語句時,除COUNT( * )以外的所有合計函式(MAX,MIN,AVG,SUM)都不能使用。 9.使用時,最好先按照選擇條件欄位排序,這樣會改善performance.