The SELECT
statement is kind of a big deal in ABAP programming. SAP sits on a database server and the SELECT
statement serves data into ABAP. It's is the main and only channel in fetching data, so it is good to know a thing or 2 about it. In it's simplest form:
TABLES: mara. SELECT-OPTIONS:
so_matnr for mara-matnr. SELECT * FROM mara WHERE matnr IN so_matnr. * Do something with the result ENDSELECT.
The above example selects all available fields (*
) from table mara
(The material master) for which the material number (matnr
) is specified in range variabele (select-options variabele) so_matnr
. Note that the actual select statement is a loop, ending with ENDSELECT.
The results of a selection "round" are made available in variabele mara
which is effectively made available via the TABLES: mara
definition. All in all this is a working setup, and even in the early versions of SAP this would have worked. But SAP Abap has come a long way since it's early versions.
Field lists should be specified, the mara
workarea is needed, but in a more useful way, the loop effect is a performance killer and puts database server power out of play, thus selection results should be placed into a table. You may find that the ENDSELECT
statement is not used very often any more. Nor is the TABLES
statement.
TABLES: mara. "<= for select-options definition only TYPES: begin of ty_mara, matnr type mara-matnr, matkl type mara-matkl, end of ty_mara. DATA: gt_mara type standard table of ty_mara. SELECT-OPTIONS: so_matnr for mara-matnr. SELECT matnr matkl FROM mara INTO TABLE gt_mara WHERE matnr IN so_matnr. * Do something with the result (internal table)
Not only is the approach more efficient for a database server (the instruction executed on the database is much larger, returning all results in a single request), this is (once you're used to it) much more efficient and readable ABAP coding as well.