轻松使用 ABAP range 表

663 阅读1分钟

关于 ranges

Ranges 是结构与选择表相同的内部表。它们对于在 ABAP 中灵活读取数据库数据非常有用。范围表总是由四列组成:

FieldDescriptionExamples
SIGNwhether records should be in- or excluded'I' = Include / 'E' = Exclude
OPTIONthe selection operator'EQ' = Equal /'BT' = Between / 'GT' = Greater than …
LOWthe lower limit of the interval
HIGHthe 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 ) ).

如果要反其道而行之,从范围表中提取数据,则应同时使用 CORRESPONDINGMAPPING

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.