for all entries in語句

對於不能join的表,使用for all entries in語句將該表與內表串聯。

SELECT bseg~kunnr

       bseg~lifnr     

       bseg~belnr

INTO TABLE itab_bseg

FROM bseg

   FOR ALL ENTRIES IN itab_main

WHERE bukrs in _bukrs

and ( belnr = itab_main-belnr

    AND hkont = itab_main-hkont ).

由於BSEG不能和BSIS做inner join所以先將BSIS內容放到itab_main 中,然後用 FOR ALL ENTRIES IN來串聯。

1-WHERE子句中的bukrs in _bukrs是指bseg-bukrs存在於_bukrs這個select-options中,_bukrs不是itab_main的field所以這部分不包括在括號中.

當然會增加內存使用了。
原本一個條件,數次(驅動表的紀錄條數)向對DB操作,
使用了FOR ALL ENTRIES後,
相當於把驅動表裏的條件字段的所有值用OR 連起來,
一次對DB操作,
條件語句增大,勢必使內存佔用增多。


1SELECT CARRID

         CONNID

         PRICE

    FROM SFLIGHT

    INTO TABLE IT_PRICE

     FOR ALL ENTRIES IN IT_SFLIGHT

   WHERE CARRID = IT_SFLIGHT-CARRID

     AND CONNID = IT_SFLIGHT-CONNID'.

WHERE 條件中,IT_SFLIGHT-CARRIDIT_SFLIGHT-CONNID些列將用作佔位符。 SELECT 句的集是 SELECT 句的所有果集的合,果集是用內部表 IT_SFLIGHT 中的相應值一行上佔位符實際WHERE子句的特殊就是下面WHERE基本句的略寫法。

SELECT DISTINCT CARRID

                  CONNID

                  PRICE

    FROM SFLIGHT

    INTO TABLE IT_PRICE

   WHERE ( CARRID = 'LH'   AND

           CONNID = '2415' ) OR

         ( CARRID = 'SQ'   AND

           CONNID = '0026' ) OR

         ( CARRID = 'LH'   AND

           CONNID = '0400' ) .

2使用該語句,對於最後得出的果集系統會自動除重行。因此如果你要保留重複行記錄時,記得在SELECT語句中添加足夠鍵值項目(有必要時,增加全部鍵值項目),以保證結果集中所需重複項目不會被刪除。(例如選取支付金額時,支付事件可能不同,但金額可能相同,此時一定要注意,以避免錯誤刪除結果記錄。)

3FOR 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)都不能使用。

//判斷內表是否爲空

使用語句: DESCRIBE TABLE ITAB LINES VARIABLE.判斷系統變量sy-subrc是否爲0,如果爲0就表示不空,反之爲空!
DESCRIBE TABLE ITAB LINES VARIABLE

IF NOT P_VARIANT IS INITIAL.
    WX_VARIANT-VARIANT = P_VARIANT.

發佈了30 篇原創文章 · 獲贊 1 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章