ABAP Keyword Documentation → ABAP - Reference → Processing External Data → ABAP Database Accesses → Open SQL → Open SQL - Read Accesses → SELECT → SELECT - ORDER BY
SELECT, Dynamic ORDER-BY Clause
This example demonstrates how sorting is specified dynamically for SELECT
.
Other versions:
7.31 | 7.40 | 7.54
Source Code
TYPES flag TYPE c LENGTH 1.
DATA: flag_tab TYPE TABLE OF flag WITH EMPTY KEY,
order_by TYPE string,
spfli_tab TYPE TABLE OF spfli WITH EMPTY KEY.
"Input screen for columns
DATA(components) = CAST cl_abap_structdescr(
cl_abap_typedescr=>describe_by_name( 'SPFLI' ) )->components.
LOOP AT components FROM 2 ASSIGNING FIELD-SYMBOL(<component>).
APPEND INITIAL LINE TO flag_tab ASSIGNING FIELD-SYMBOL(<flag>).
cl_demo_input=>add_field(
EXPORTING text = CONV string( <component>-name )
CHANGING field = <flag> ).
ENDLOOP.
cl_demo_input=>request( ).
"Create ORDER BY clause
LOOP AT components FROM 2 ASSIGNING <component>.
DATA(idx) = sy-tabix.
DATA(flag) = flag_tab[ idx - 1 ].
order_by = order_by &&
COND string( WHEN to_upper( flag ) = `X` OR
to_upper( flag ) = `A`
THEN |, { <component>-name } ASCENDING|
WHEN to_upper( flag ) = `D`
THEN |, { <component>-name } DESCENDING|
ELSE `` ).
ENDLOOP.
SHIFT order_by BY 2 PLACES LEFT.
"Database access
TRY.
SELECT *
FROM spfli
ORDER BY (order_by)
INTO TABLE @spfli_tab.
CATCH cx_sy_dynamic_osql_error INTO DATA(exc).
cl_demo_output=>display( exc->get_text( ) ).
RETURN.
ENDTRY.
cl_demo_output=>display( spfli_tab ).
Description
RTTI is used to create input fields
for all columns of the table SPFLI except for the client column. The values X
or A for ascending sorts and D for descending
sorts can be entered in these columns. A dynamic ORDER BY
clause is generated from the input as a character string and used in a SELECT
statement.