ABAP RANGE內表


RANGES 語句:用與選擇表相同的結構創建內表,可使用RANGES語句,如下所示:

語法:RANGES <seltab> FOR <f>.     

該語句創建選擇表<seltab>,該表參考數據庫表的列<f>或內部字段<f>。選擇表<seltab>必須在程序中填充。不必在程序中再用TABLES語句聲明數據庫表。

RANGES語句是下列語句的短格式:

DATA: BEGIN OF <seltab> OCCURS 10,
         SIGN(1),
         OPTION(2)
         LOW  LIKE <f>,
         HIGH LIKE <f>,
      END OF <seltab>.
用RANGES語句創建的選擇表不是選擇屏幕的一部分,它們在程序<prog>中不能用於數據傳遞,
該程序由下列語句啟動:SUBMIT <prog> WITH <seltab> IN <table>.
           表<table>可以在調用程序中用RANGES創建。

用RANGES創建的內表與選擇表結構相同,但功能不同。 ***注意:sing和option的值必須是大寫
下面介紹以下range中四個參數的具體取值:
  SIGN 可以取以下兩種值:INCLUED 和 EXCLUDE
    
sign = 'I' 'I' 表示包含:LOW 、HIGH的值
    
sign = 'E' 'E' 表示排除:LOW、HIGH的值

   OPTION 運算符可以取以下值:

     'EQ' , 'NE' "等於,不等於 Equal ,Not Equal

     'GT' , 'LT' "大於,小於 Greater Than ,Less Than

     'GE' , 'LE' "大於等於,小於等於 Greater Than or Equal ,Less Than or Equal

     'CP' , 'NP' "參考判斷格式,如"ABC*",NP排除參考格式

     'BT' , 'NB' "位於,不位於,功能與 Between 和 Not Between 一樣。

   LOW 是指當前值,或區間最小值(操作符是范圍的話)

     LOW:LOW的數據類型與數據庫表的列類型相同,該表與選擇標准相連接。

      如果 Option 運算符不為 'BT' 或 'NB',LOW的內容定義單值選擇,它與OPTION中的運算符相結合,為數據庫選擇指定了條件。

      如果 Option 運算符為 'BT' 或 'NB',並且 HIGH 不為空, LOW和HIGH中的內容為間隔選擇指定上界和下界,與OPTION中的運算符相結合,該間隔為數據庫選擇指定了條件。

   HIGH 是指區間最大值

     如果 Option 運算符為 'BT' 或 'NB',HIGH 的值才會生效,運算符不是Between 和 Not Between 時,high有值也不會參與計算

 
示例:
ranges: s_KVGR1 for tvv1t-KVGR1.
data: it_tvv1t type TABLE OF TVV1T.  "數據表一共22條記錄,kvgr1 為 002 的記錄已刪除

    s_KVGR1-sign = 'I'.
    s_KVGR1-option = 'EQ'.   "包括 等於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].   "輸出結果003

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'EQ'.   "排除 等於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果除003外所有

    s_KVGR1-sign = 'I'.
    s_KVGR1-option = 'NE'.   "包括 不等於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果除003外所有

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'NE'.  "排除 不等於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].   "輸出結果003

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'GT'.  "排除 大於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果001、003  2條記錄(應該是3條,數據表沒有002這條記錄)

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'LT'.   "排除 小於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].   "輸出結果003、004……  等21條記錄

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'GE'.  "排除 大於等於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果001  1條記錄(應該是2條,數據表沒有002這條記錄)

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'LE'.   "排除 小於等於 003 的記錄
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].   "輸出結果004、005……  等20條記錄

    "這兩個測試不出來,每次出來都是全部或者空,先不管它們
    'CP' , 'NP'   "參考判斷格式,如"ABC*",NP排除參考格式 

    s_KVGR1-sign = 'I'.
    s_KVGR1-option = 'BT'.   "包含 位於 003 到 007 的記錄,閉區間
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果003、004……007  5條記錄
 
    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'BT'.  "排除 位於 003 到 007 的記錄,閉區間
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].   "輸出結果001、008、009……   等17條記錄

    s_KVGR1-sign = 'I'.
    s_KVGR1-option = 'NB'.   "包含 不位於 003 到 007 的記錄,閉區間
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果001、008、009……   等17條記錄

    s_KVGR1-sign = 'E'.
    s_KVGR1-option = 'NB'.  "排除 不位於 003 到 007 的記錄,閉區間
    s_KVGR1-low = '003'.
    s_KVGR1-high = '007'.
    APPEND s_KVGR1 TO s_KVGR1[].  "輸出結果003、004……007  5條記錄


select * from TVV1T into CORRESPONDING FIELDS OF TABLE 
        it_tvv1t where SPRAS = '1' and KVGR1 in s_KVGR1.

 
        

 

 
 


免責聲明!

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



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