关于 ranges
Ranges 是结构与选择表相同的内部表。它们对于在 ABAP 中灵活读取数据库数据非常有用。范围表总是由四列组成:
| Field | Description | Examples |
|---|---|---|
| SIGN | whether records should be in- or excluded | 'I' = Include / 'E' = Exclude |
| OPTION | the selection operator | 'EQ' = Equal /'BT' = Between / 'GT' = Greater than … |
| LOW | the lower limit of the interval | |
| HIGH | the higher limit of the interval |
将内部表格转换为范围表
自 ABAP 7.40 以来,FOR 运算符可实现从内部表到范围表的简单转换,而无需直接在表上循环。
DATA(lt_matnr_range) = VALUE rsdsselopt_t(
FOR ls_input_data IN it_input_data
( sign = if_fsbp_const_range=>sign_include
option = if_fsbp_const_range=>option_equal
low = ls_input_data-matnr ) ).
如果要反其道而行之,从范围表中提取数据,则应同时使用 CORRESPONDING 和 MAPPING。
lt_data = CORRESPONDING #( lt_matnr_range MAPPING low = matnr ).
直接从 SELECT 语句中填写范围
以前需要先选择数据,然后在数据上循环以填充一个范围的时代已经一去不复返了。使用当前的语法,可以在 SELECT 语句中直接填充范围。
SELECT 'I' AS sign,
'EQ' AS option,
matnr AS low,
matnr AS high
INTO TABLE @DATA(lt_matnr_range)
FROM mara.