Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
ansonabraham
Participant

This article illustrates how to write a dynamic where clause in ABAP SELECT queries using the function module 'RH_DYNAMIC_WHERE_BUILD'.

Calling the function module RH_DYNAMIC_WHERE_BUILD

CALL FUNCTION 'RH_DYNAMIC_WHERE_BUILD'

  EXPORTING

    dbtable                = v_table_name

  tables

    condtab               = t_condtab

    where_clause      = t_where_clause

EXCEPTIONS

   EMPTY_CONDTAB         = 1

   NO_DB_FIELD           = 2

   UNKNOWN_DB            = 3

   WRONG_CONDITION       = 4

   OTHERS                = 5.

IF sy-subrc <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

Input parameters

v_table_name = Table name

t_condtab = Internal table contains the fieldnames and their
values used in where clause.

Output parameters

t_where_clause = Output string which will be used along
with the 'WHERE' clause in Select query. This internal table contains one field
with type character.

Populating t_condtab internal table

SFLIGHT table is used in this example to fetch data using dynamic Select query. CARRID, CONNID and FLDATE are the 3 key fields used for fetching data from SFLIGHT (MANDT field is not considered in this example).  The internal table t_condtab will be populated using these 3 fields and passed to the function module. Function module will return the internal table t_where_clause, which can be used along with the where clause in the Select query.

Sample code for fetching data from SFLIGHT using dynamic where clause

TYPES : BEGIN OF ty_where_clause,

          line TYPE char72,

        END OF ty_where_clause.


DATA : t_condtab TYPE STANDARD TABLE OF hrcond,

       t_sflight TYPE STANDARD TABLE OF sflight,

t_where_clause TYPE STANDARD TABLE OF ty_where_clause.


PERFORM fill_condtab USING 'CARRID' 'EQ' 'AA'.

PERFORM fill_condtab USING 'CONNID' 'EQ' '17'.

PERFORM fill_condtab USING 'FLDATE' 'EQ' '20130724'.


CALL FUNCTION 'RH_DYNAMIC_WHERE_BUILD'

  EXPORTING

    dbtable              = 'SFLIGHT'

  TABLES

    condtab             = t_condtab

    where_clause    = t_where_clause

  EXCEPTIONS

    empty_condtab   = 1

    no_db_field     = 2

    unknown_db      = 3

    wrong_condition = 4

    OTHERS          = 5.

IF sy-subrc <> 0.

  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.


SELECT *

  FROM sflight

  INTO TABLE t_sflight

WHERE (t_where_clause).


*&---------------------------------------------------------------------*

*&      Form  FILL_CONDTAB

*&---------------------------------------------------------------------*


FORM fill_condtab  USING    value(pv_field) TYPE dbfeld

                            value(pv_operator) TYPE char2

                            value(pv_low)   TYPE hrvalue


  DATA : lx_condtab TYPE hrcond.

  lx_condtab-field = pv_field.

  lx_condtab-opera = pv_operator.

  lx_condtab-low   = pv_low.

  APPEND lx_condtab TO t_condtab.

ENDFORM.  

7 Comments