Quantcast
Channel: SCN : Blog List - ABAP Development
Viewing all articles
Browse latest Browse all 943

Writing dynamic where clause in ABAP Select query

$
0
0

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 (v_where_clause).


PERFORM display_output.



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

*&      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.  


Viewing all articles
Browse latest Browse all 943

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>