You use the statement
SELECT- option S seltab FOR f .
to declare a selection table in the program that is linked to the f column of a database table, or to an internal f field in the program. A selection table is an internal table object of the standard table type that has a standard key and a header line. Selection tables are used to store complex selections using a standardized procedure. They can be used in several ways. Their main purpose is to directly translate the selection criteria into database selections using the WHERE addition in Open SQL statements.
In addition to selection tables that you create using SELECT- option S , you can use the RANGES statement to create internal tables that have the structure of selection tables. You can use these tables with certain restrictions the same way you use actual selection tables.
Structure of Selection Tables
The row type of a selection table is a structure that consists of the following four components: sign , option , low , and high . Each row of a selection table that contains values represents a sub-condition for the complete selection criterion. Description of the individual components:
The data type of sign is c with length 1. The contents of sign determine for each row whether the result of the row condition is to be included in or excluded from the resulting set of all rows. Possible values are I and E.
I stands for inclusive (inclusion criterion -operators are not inverted)
E stands for exclusive (exclusion criterion - operators are inverted)
The data type of option is c with length 2. option contains the selection operator. The following operators are available:
If high is empty, you can use EQ , NE , GT , LE , LT , CP and NP . These operators are the same as those that are used for logical expressions . Yet operators CP and NP do not have the full functional scope they have in normal logical expressions. They are only allowed if wildcards ( '*' or '+' ) are used in the input fields. If wildcards are entered on the selection screen, the system automatically uses the operator CP. The escape character is defined as #.
If high is filled, you can use BT (BeTween) and NB (Not Between). These operators correspond to BETWEEN and NOT BETWEEN that are used to check if a field belongs to a range. You cannot use wildcard characters.
The data type of low is the same as the column type of the database table, to which the selection criterion is linked.
If high is empty, the contents of low define a single field comparison. In combination with the operator in option , it specifies a condition for the database selection.
If high is filled, the contents of low and high specify the upper and lower limits for a range. In combination with the operator in the option field, the range specifies a condition for the database selection.
The data type of high is the same as the column type of the database table, to which the selection criterion is linked. The contents of high specify the upper limit for a range selection.
If the selection table contains more than one row, the system applies the following rules when creating the complete selection criterion:
Form the union of sets defined on the rows that have sign field equal to I (inclusion).
Subtract the union of sets defined on the rows that have sign field equal to E (exclusion).
If the selection table consists only of rows in which the sign field equals E, the system selects all data outside the set specified in the rows.
You can use the following variants of the TYPES and DATA statements to create internal tables of the same type as selection tables.
TYPES|DATA rangetab TYPE RANGE OF type .
TYPES|DATA rangetab LIKE RANGE OF obj .
This defines internal standard tables whose line type is a structure as follows:
sign (1) TYPE c
option (2) TYPE c
low TYPE type or LIKE obj
high TYPE type or LIKE obj
Tables defined in this way have the same structure as selection tables, but they do not have the same functionality. They are not part of the selection screen: No corresponding input fields are generated and these tables cannot be used as a data interface in a program prog called using
SUBMIT prog WITH rangetab IN table .
However, you can use the above statements to create the table table in the calling program. The main function of these tables is to pass data to the actual selection tables without displaying the selection screen when executable programs are called .
The above tables are like actual selection tables in the WHERE clause of Open SQL statements and can be used in combination with the IN operator in logical expressions, but they are not linked to a database table. They:
are not passed like selection criteria and logical databases
cannot be used with the shortened form of selection tables in logical expressions
cannot be used like selection criteria in GET events
REPORT demo_sel_screen_tables_ranges. DATA: s_carrid TYPE RANGE OF spfli-carrid, s_carrid_wa LIKE LINE OF s_carrid. s_carrid_wa-sign = 'I'. s_carrid_wa-option = 'EQ'. s_carrid_wa-low = 'AA'. APPEND s_carrid_wa TO s_carrid. SUBMIT demo_selection_screen_ldb_1 WITH carrid IN s_carrid VIA SELECTION-SCREEN AND RETURN.
A selection table s_carrid is created with reference to column CARRID of database table SPFLI. The fields s_ carrid - low and s_ carrid - high have the same type as CARRID. The work area of the internal table s_carrid is filled and appended to the table. Program demo2 is called. If demo2 is linked to logical database F1S, its selections screen contains the fields of selection criterion CARRID from the logical database. These fields are filled with the contents of the internal table.