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.