Ein RANGE definiert eine spezielle interne Tabelle vom Typ STANDARD TABLE mit Header Line zur Abbildung von Intervallen (z.B. für SELECT-OPTIONS und WHERE … IN).
Die Definition von RANGES an sich ist obsolet.
Weiterführende Infos: Link und Link
Tabellenfelder einer RANGE-Tabelle
- SIGN (Bereichabgrenzung)
- Typ: DDSIGN
- Domäne: DDSIGN
- Werte
- I Bereichsabgrenzung eingeschlossen (Inclusive)
- E Bereichsabgrenzung ausgeschlossen (Exclusive)
- OPTION (Optionen)
- Typ: DDOPTION
- Domäne: DDOPTION
- Werte
- EQ gleich
- BT zwischen … und …
- CP enthält das Template
- LE kleiner oder gleich
- GE größer oder gleich
- NE ungleich
- NB nicht zwischen … und …
- NP enthält das Template nicht
- GT größer
- LT kleiner
- LOW (niedrigster Wert des Intervalls)
- Typ: C
- Länge: 1…n (abh. vom Such-Datentyp)
- HIGH (höchster Wert des Intervalls)
- Typ: C
- Länge: 1…n (abh. vom Such-Datentyp)
(leer, wenn z.B. OPTION = EQ)
DDIC-Zeilentypen, die RANGEs abbilden
* SELOPT * RSDSSELOPT * RSIS_S_RANGE
DDIC-Tabellentypen, die RANGEs abbilden
* RSELOPTION * CMS_TAB_BII_CAG_TYP_RNG * FIWTIN_T_SELOPT * PIQ_SELOPT_T * PSI_WE_SELOPT_TT
Hilfsklasse mit Konstanten für die Selektionstabellen bzw. Ranges-Tabellen
IF_FSBP_CONST_RANGE (Konstanten für die Selektionstabellen bzw. Ranges-Tabellen) * OPTION_BETWEEN 'BT' * OPTION_CONTAINS_PATTERN 'CP' * OPTION_EQUAL 'EQ' * OPTION_GREATER 'GT' * OPTION_GREATER_EQUAL 'GE' * OPTION_LESS 'LT' * OPTION_LESS_EQUAL 'LE' * OPTION_NOT_BETWEEN 'NB' * OPTION_NOT_CONTAINS_PATTERN 'NP' * OPTION_NOT_EQUAL 'NE' * SIGN_EXCLUDE 'E' * SIGN_INCLUDE 'I'
Beispiel 1 (Übergabe von RANGES (SELECT-OPTIONS) an Klassenmethoden)
REPORT zrange_demo. * Klasse für Demo der Übergabe von RANGEs (SELECT-OPTIONS) CLASS lcl_matnr DEFINITION. PUBLIC SECTION. CLASS-METHODS: get_data IMPORTING i_it_matnr TYPE STANDARD TABLE. " RANGE (SELECT-OPTIONS) als STANDARD TABLE übergeben ENDCLASS. CLASS lcl_matnr IMPLEMENTATION. METHOD get_data. DATA: it_mara TYPE STANDARD TABLE OF mara WITH DEFAULT KEY. * STANDARD TABLE im SQL verwenden SELECT * FROM mara INTO TABLE @it_mara WHERE matnr IN @i_it_matnr. ... ENDMETHOD. ENDCLASS. * SELECT-OPTIONS festlegen DATA: lv_matnr TYPE mara-matnr. * RANGE so_matnr für MATNR definieren SELECT-OPTIONS: so_matnr FOR lv_matnr. INITIALIZATION. * RANGE so_matnr initialisieren so_matnr[] = VALUE #( ( sign = 'I' option = 'EQ' low = '0000012345' high = '' ) ). START-OF-SELECTION. * Datenbereich des RANGE so_matnr übergeben lcl_matnr=>get_data( i_it_matnr = so_matnr[] ).
Beispiel 2 (RANGE OF)
* erzeugt eine interne Tabelle vom Typ STANDARD TABLE mit Header Line mit den Datenfeldern * SIGN (C(1)) | OPTION (C(2)) | LOW (C(10)) | HIGH (C(10)) DATA: it_kunnr TYPE RANGE OF kunnr.
Beispiel 3 (STANDARD TABLE)
TYPES: BEGIN OF ty_range, sign TYPE ddsign, option TYPE ddoption, low TYPE char18, " char18 für 18-stellige MATNR high TYPE char18, " char18 für 18-stellige MATNR END OF ty_range. * erzeugt eine interne Tabelle vom Typ STANDARD TABLE mit den Datenfeldern * SIGN (C(1)) | OPTION (C(2)) | LOW (C(18)) | HIGH (C(18)) DATA: it_matnr TYPE STANDARD TABLE OF ty_range WITH DEFAULT KEY.
Beispiel 4 (STANDARD TABLE mit generischen DDIC-Strukturen)
DATA(rg_so_carrid) = VALUE rseloption( ( sign = 'I' option = 'EQ' low = 'AA' high = '' ) ).
Beispiel 5 (Verwendung in OpenSQL-WHERE-Condition)
DATA(rg_carrid) = VALUE rseloption( ( sign = 'I' option = 'EQ' low = 'AA' high = '' ) ( sign = 'I' option = 'EQ' low = 'LH' high = '' ) ). SELECT * INTO TABLE @DATA(it_sflight) FROM sflight WHERE carrid IN @rg_carrid. cl_demo_output=>display( it_sflight ).
Beispiel 6 (Verwendung eines RANGESs zum Filtern von internen Tabellen)
* Liste mit Namen DATA(it_names) = VALUE string_table( ( |Horst| ) ( |Heiner| ) ( |Ida| ) ( |Lotte| ) ( |Hanna| ) ). * Range mit Suchbegriffen DATA(rg_search) = VALUE rseloption( ( sign = 'I' option = 'EQ' low = 'Ida' high = '' ) ( sign = 'I' option = 'EQ' low = 'Lotte' high = '' ) ). * Filtern der Liste mittels WHERE-Condition + RANGE LOOP AT it_names ASSIGNING FIELD-SYMBOL(<n>) WHERE table_line IN rg_search. WRITE: / <n>. ENDLOOP.