轉自http://www.sapjx.com/abap-range-table.html
1. Range Table 概述
Range Table 為 SAP R/3系統標准內表的一種,結構與 Selection Table 一致,
由 SIGN, OPTION, LOW 和 HIGH字段組成;
可以通過 TYPE RANGE OF 語句或 RANGES 關鍵字定義 Range Table。
Range Table 常用於Open SQL語句中的條件篩選,可以優化取數效率與程序性能。
2.定義Range Table
可以通過兩種方式定義:
1) TYPE RANGE OF…
DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}
[INITIAL SIZE n]
[WITH HEADER LINE]
[VALUE IS INITIAL]
[READ-ONLY].
2) RANGES
語法:
RANGES rtab FOR dobj [OCCURS n].
* 全局變量 DATA: gt_marc TYPE STANDARD TABLE OF marc. *-------------------------------------------
* 通過 RANGE OF 定義 *------------------------------------------- DATA: gr_werks TYPE RANGE OF werks_d, gw_werks LIKE LINE OF gr_werks. * 宏定義 DEFINE set_range. gw_werks-sign = 'I'. gw_werks-option = 'EQ'. gw_werks-low = &1. append gw_werks to gr_werks. END-OF-DEFINITION. set_range '1000'. set_range '1010'. SELECT * FROM marc INTO CORRESPONDING FIELDS OF TABLE gt_marc WHERE werks IN gr_werks. *-------------------------------------------
* 通過 RANGES 定義 *------------------------------------------- TABLES:marc. RANGES: gr_matnr FOR marc-matnr.
這里需要注意,For后面字段必須為參考表的字段,不能使用 Data Element 來定義,否則系統會報出錯誤。
3. 在 Subroutine 中傳輸 Range Table
TABLES: mara. * 全局變量 DATA: gt_mara TYPE STANDARD TABLE OF mara. DATA: gr_matnr TYPE RANGE OF mara-matnr WITH HEADER LINE, gl_matnr LIKE LINE OF gr_matnr. *&---------------------------------------------------------------------*
*& Form frm_get_data *&---------------------------------------------------------------------*
* text *----------------------------------------------------------------------*
* -->PT_MARA text * -->PR_MATNR text *----------------------------------------------------------------------* FORM frm_get_data TABLES pt_mara STRUCTURE mara pr_matnr STRUCTURE gr_matnr. SELECT matnr mtart matkl FROM mara INTO CORRESPONDING FIELDS OF TABLE pt_mara WHERE matnr IN pr_matnr. ENDFORM. " F_GET_DATA
4. 在 Function Module 中傳輸 Range Table
當需要在 Function Module 中傳輸Range Table 時,可以直接參考預定義類型 Table:
FIELD-SYMBOLS < fs_line > TYPE ANY. FIELD-SYMBOLS < fs_value > TYPE ANY. DATA lv_value TYPE char40. LOOP AT t_selection ASSIGNING < fs_line >. ASSIGN COMPONENT 'LOW' OF STRUCTURE < fs_line > TO < fs_value >. lv_value = < fs_value >. … ENDLOOP.