RANGES 和 TYPE RANGE OF
RANGES
在 SAP 中,RANGES
是一种数据类型,用于在程序中定义一个数据区间,通常用于选择特定的记录或数据范围。它广泛应用于 ABAP(高级业务应用编程)中,用于筛选和选择特定的值。例如,在 SELECT 语句中,或者在用 SELECT-OPTIONS
或 PARAMETERS
定义输入字段时,RANGES
可以帮助用户或系统指定一个范围条件。
RANGES
的基本语法
RANGES
声明通常会定义一个区间或范围。它由两个主要部分组成:
- LOW — 范围的下限。
- HIGH — 范围的上限。
RANGES <range_name> FOR <data_type>.
<range_name>
是你为范围定义的名称。<data_type>
是要比较的字段数据类型,通常是结构体、表字段或数据对象类型。
详细语法结构
RANGES <range_name> FOR <type>
[SIGN <sign>]
[OPTION <option>].
-
<SIGN>
用于指定区间的操作符,可以是:I
(包含,默认值)E
(不包含)
-
<OPTION>
用于指定区间的条件:EQ
— 等于NE
— 不等于GT
— 大于LT
— 小于GE
— 大于或等于LE
— 小于或等于BT
— 在某个范围之间(大于等于小于)NB
— 不在某个范围之间(不大于等于且不小于)
示例:使用 RANGES
过滤数据
假设我们需要定义一个范围来选择一个客户号的范围,程序会根据这个范围筛选出符合条件的数据。
DATA: it_customers TYPE TABLE OF mara,
lv_range TYPE RANGE OF mara-kunnr.
RANGES: r_kunnr FOR mara-kunnr. " 定义一个范围
START-OF-SELECTION.
" 填充范围
r_kunnr-sign = 'I'. " 包含
r_kunnr-option = 'BT'. " 在范围内
r_kunnr-low = '1000'.
r_kunnr-high = '2000'.
APPEND r_kunnr.
" 查询符合范围的数据
SELECT * FROM mara
WHERE kunnr IN r_kunnr
INTO TABLE it_customers.
LOOP AT it_customers.
WRITE: / it_customers-kunnr.
ENDLOOP.
解析
-
定义范围:
使用RANGES
关键字创建了一个r_kunnr
的范围,指定了mara-kunnr
字段类型(即客户号)。 -
指定范围条件:
r_kunnr-sign = 'I'
:表示包含该范围内的值。r_kunnr-option = 'BT'
:表示范围之间(“Between”)的条件。r_kunnr-low = '1000'
和r_kunnr-high = '2000'
:设置客户号的范围为从 1000 到 2000。
-
数据查询:
使用SELECT
查询所有客户号在r_kunnr
定义的范围内的记录。
示例 2:使用 RANGES
进行多个条件筛选
如果你需要多个范围条件,可以使用 APPEND
添加多个区间。
DATA: it_customers TYPE TABLE OF mara,
lv_range TYPE RANGE OF mara-kunnr.
RANGES: r_kunnr FOR mara-kunnr.
START-OF-SELECTION.
" 第一个范围:1000 到 2000
r_kunnr-sign = 'I'.
r_kunnr-option = 'BT'.
r_kunnr-low = '1000'.
r_kunnr-high = '2000'.
APPEND r_kunnr.
" 第二个范围:3000 到 4000
r_kunnr-sign = 'I'.
r_kunnr-option = 'BT'.
r_kunnr-low = '3000'.
r_kunnr-high = '4000'.
APPEND r_kunnr.
" 查询符合多个范围条件的数据
SELECT * FROM mara
WHERE kunnr IN r_kunnr
INTO TABLE it_customers.
LOOP AT it_customers.
WRITE: / it_customers-kunnr.
ENDLOOP.
解析
-
该示例通过两次
APPEND
向r_kunnr
添加了两个区间:- 第一个区间是客户号从 1000 到 2000。
- 第二个区间是客户号从 3000 到 4000。
这些范围被用来查询客户号在这两个范围内的数据。
示例 3:结合 SIGN
和 OPTION
使用不同的筛选条件
假设你只想查找某个具体客户号,或者在某个范围之外的客户号。可以通过设置不同的 SIGN
和 OPTION
来实现。
DATA: it_customers TYPE TABLE OF mara,
lv_range TYPE RANGE OF mara-kunnr.
RANGES: r_kunnr FOR mara-kunnr.
START-OF-SELECTION.
" 选择客户号为 1001
r_kunnr-sign = 'I'.
r_kunnr-option = 'EQ'. " 等于
r_kunnr-low = '1001'.
APPEND r_kunnr.
" 查询符合条件的数据
SELECT * FROM mara
WHERE kunnr IN r_kunnr
INTO TABLE it_customers.
LOOP AT it_customers.
WRITE: / it_customers-kunnr.
ENDLOOP.
解析
SIGN = 'I'
表示选择满足条件的记录。OPTION = 'EQ'
表示客户号等于1001
。- 该查询只返回客户号为
1001
的记录。
小结
RANGES
使得 ABAP 程序能够灵活地处理数据的范围条件。- 它不仅支持简单的区间查询,还可以通过
SIGN
和OPTION
进一步定制查询的条件,如EQ
(等于)、GT
(大于)等。 RANGES
使得代码更加简洁和灵活,避免了手动构造复杂的 SQL 查询。
通过结合 RANGES
和其他 ABAP 查询语句,开发者可以高效地处理复杂的数据选择和过滤逻辑。
在 SAP ABAP 编程中,TYPE RANGE OF
用于定义一个范围类型(range type),通常用于指定一个值的范围集合(例如一个区间或多个离散值),并且这种类型可以在内表或选择屏幕等地方使用。它是创建一组值的容器,允许在条件表达式或数据选择时使用该范围。
TYPE RANGE OF
的作用:
-
定义区间范围:
TYPE RANGE OF
允许开发者创建一个包含多个区间的结构。每个区间由一个下限和上限组成。例如,可以使用它来定义一个日期范围、一个数值范围或其他类型的区间。 -
用于筛选和条件判断:
这种类型的定义通常用于查询操作,筛选数据或进行条件判断。通过指定一个范围(例如,大于某个值且小于另一个值),可以从数据库表或内存表中筛选出符合条件的记录。 -
支持多个值的集合:
除了区间,它还允许指定多个离散的值(通过SIGN
和OPTION
字段),这使得开发者能够在处理查询时不局限于一个连续的区间,而是可以指定多个不连续的值。
TYPE RANGE OF
的语法和结构:
DATA: lt_range TYPE RANGE OF <type>.
其中:
<type>
是基本数据类型,通常是CHAR
,NUM
,DATE
等。RANGE OF <type>
创建一个包含区间的内表。它具有以下几个字段:- SIGN(标志):用来表示选择条件的符号,可能的值为:
I
(Include):表示包括这个区间。E
(Exclude):表示排除这个区间。
- OPTION(选项):表示条件的类型,常见的选项有:
EQ
(等于)BT
(Between,即范围之间)GT
(大于)LT
(小于)GE
(大于等于)LE
(小于等于)
- LOW(下限):存储区间的下限值。
- HIGH(上限):存储区间的上限值(只有在
OPTION
为BT
时才有意义)。
- SIGN(标志):用来表示选择条件的符号,可能的值为:
示例:使用 TYPE RANGE OF
定义一个数字范围
DATA: lt_range TYPE RANGE OF i, " 定义一个整数范围
ls_range TYPE LINE OF lt_range.
* 定义一个范围:从10到20
ls_range-sign = 'I'. " 包括这个范围
ls_range-option = 'BT'. " Between 10 and 20
ls_range-low = 10.
ls_range-high = 20.
APPEND ls_range TO lt_range.
* 定义一个范围:从30到40
ls_range-sign = 'I'.
ls_range-option = 'BT'.
ls_range-low = 30.
ls_range-high = 40.
APPEND ls_range TO lt_range.
示例:使用 TYPE RANGE OF
进行查询
假设我们要查询 SCARR
表中所有符合条件的航空公司代码。我们可以使用 TYPE RANGE OF
来定义一个范围,然后在查询时使用它:
DATA: lt_range TYPE RANGE OF scarr-carrid, " 定义一个航空公司代码范围
ls_range TYPE LINE OF lt_range.
* 定义一个范围:航空公司代码从'AA'到'BA'
ls_range-sign = 'I'.
ls_range-option = 'BT'.
ls_range-low = 'AA'.
ls_range-high = 'BA'.
APPEND ls_range TO lt_range.
* 使用该范围查询 SCARR 表
SELECT * FROM scarr
WHERE carrid IN lt_range.
WRITE: / scarr-carrid, scarr-cname.
ENDSELECT.
在这个例子中,lt_range
定义了一个包含从 ‘AA’ 到 ‘BA’ 范围的航空公司代码区间。查询时,IN lt_range
会自动处理所有符合区间条件的记录。
总结:
TYPE RANGE OF
是 SAP ABAP 中用来定义一个范围数据类型的关键字。- 它可以定义连续区间(如数值、日期)或多个离散的值,并用于查询或其他条件判断。
- 这种数据类型非常适用于那些需要筛选多个值、区间或范围的情况。