Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

specify database field's name dynamically in a select statement

Former Member
0 Likes
2,415

Hi to all!!

I have the following problem:

I got a paraneters statement where the user is to choose the month of the year,once i have the month, i need to make a query on a database(select field_name) of a field whose name deppend on the month that the user chose before, is it possible?

What I need? I think i can do it using field simbols but I've never worked with field simbols and I have no time to learn it now.

Thanks everybody

6 REPLIES 6
Read only

guillaume-hrc
Active Contributor
1,525

Hi,

Use syntax :

SELECT (field) FROM ...

Best regards,

Guillaume

PS: You've got the same for the name of the table, the WHERE condition, etc...

Read only

Former Member
0 Likes
1,525

You can do a dynamic where condition, highlight the <b>where</b> and hit F1, you will find an example.

Never mind, I thought you wanted a dynamic where check the one posted earlier.

hith

Sunil Achyut

Message was edited by: Sunil Achyut

Read only

rahulkavuri
Active Contributor
0 Likes
1,525
PARAMETERS : TABLE(8),
             NROFJOB(2) TYPE N DEFAULT 2.
DATA: JUNK(4096),
      DOCLOW(4096),
      RECS(8) TYPE P VALUE 0,
      MAXDOC(8) TYPE P VALUE 0.

SELECT * FROM (TABLE)
      INTO JUNK
      WHERE MANDT EQ SY-MANDT
      ORDER BY PRIMARY KEY.
  RECS = RECS + 1.
  IF DOCLOW = SPACE.
    DOCLOW = JUNK.
  ENDIF.

please award points if found helpful

Read only

Former Member
0 Likes
1,525

Hi,,

tables: mara.

data: begin of t_fieldname occurs 0,

fieldname type dd03l-fieldname,

end of t_fieldname.

t_fieldname-fieldname = 'MATNR'.

append t_fieldname.

SELECT single (T_fieldname)

into corresponding fields of mara

from mara

where matnr = 'adfsf'.

write: / sy-subrc.

Thanks,

Naren

Read only

Former Member
0 Likes
1,525

Hi,

<b>Below code is the Simple one:</b>

<b>DATA: DYN_FIELD(15)

SELECT single (DYN_FIELD)

into corresponding fields of <IT_TABLE>

from <TABLE> where XXX = YYY.</b>

-


****************----


This is the complex program, have a look at it ...

REPORT zdany_dynamic_select.

* We use some parameters to dynamically control the select, this is not very 
* clever but this is just a test program !!
PARAMETER : p_tabnam TYPE tabname DEFAULT 'SFLIGHT',
            p_selfl1 TYPE edpline DEFAULT 'CARRID',
            p_selfl2 TYPE edpline DEFAULT 'CONNID',
            p_selfl3 TYPE edpline DEFAULT 'FLDATE',
            p_selfl4 TYPE edpline DEFAULT 'PRICE',
            p_selfl5 TYPE edpline DEFAULT 'CURRENCY',
            p_where1 TYPE edpline DEFAULT 'PRICE > 300',
            p_where2 TYPE edpline DEFAULT 'AND CURRENCY = ''EUR'''.
					
FIELD-SYMBOLS : <lt_outtab> TYPE ANY TABLE,
                <ls_outtab> TYPE ANY,
                <l_fld> TYPE ANY.
					
DATA: lt_where    TYPE TABLE OF edpline,
      lt_sel_list TYPE TABLE OF edpline,
      lt_group    TYPE TABLE OF edpline,
      l_having    TYPE string,
      l_wa_name   TYPE string,
      l_sel_list  TYPE edpline,
      dref        TYPE REF TO data,
      itab_type   TYPE REF TO cl_abap_tabledescr,
      struct_type TYPE REF TO cl_abap_structdescr,
      elem_type   TYPE REF TO cl_abap_elemdescr,
      comp_tab    TYPE cl_abap_structdescr=>component_table,
      comp_fld    TYPE cl_abap_structdescr=>component.
					
TYPES: f_count TYPE i.
					
* Creation of the output table including a non standard field, f_count
* see ABAP FAQ #14 for more information on this topic
struct_type ?= cl_abap_typedescr=>describe_by_name( p_tabnam ).
elem_type   ?= cl_abap_elemdescr=>describe_by_name( 'F_COUNT' ).
comp_tab = struct_type->get_components( ).
					
* We remove the unnecessary fields
LOOP AT comp_tab INTO comp_fld.
   IF comp_fld-name <> p_selfl1 AND
      comp_fld-name <> p_selfl2 AND
      comp_fld-name <> p_selfl3 AND
      comp_fld-name <> p_selfl4 AND
      comp_fld-name <> p_selfl5.
         DELETE TABLE comp_tab WITH TABLE KEY name = comp_fld-name.
   ENDIF.
ENDLOOP.
					
comp_fld-name = 'F_COUNT'.
comp_fld-type = elem_type.
APPEND comp_fld TO comp_tab.
					
struct_type = cl_abap_structdescr=>create( comp_tab ).
itab_type   = cl_abap_tabledescr=>create( struct_type ).
					
l_wa_name = 'l_WA'.
CREATE DATA dref TYPE HANDLE itab_type.
ASSIGN dref->* TO <lt_outtab>.
CREATE DATA dref TYPE HANDLE struct_type.
ASSIGN dref->* TO <ls_outtab>.
					
* Creation of the selection fields and the "group by" clause
APPEND p_selfl1 TO lt_sel_list.
APPEND p_selfl1 TO lt_group.
APPEND p_selfl2 TO lt_sel_list.
APPEND p_selfl2 TO lt_group.
APPEND p_selfl3 TO lt_sel_list.
APPEND p_selfl3 TO lt_group.
APPEND p_selfl4 TO lt_sel_list.
APPEND p_selfl4 TO lt_group.
APPEND p_selfl5 TO lt_sel_list.
APPEND p_selfl5 TO lt_group.
APPEND 'COUNT(*) AS F_COUNT' TO lt_sel_list.
					
* creation of the "where" clause
APPEND p_where1 TO lt_where.
APPEND p_where2 TO lt_where.
					
* Creation of the "having" clause
l_having = 'count(*) >= 1'.
					
* THE dynamic select
SELECT          (lt_sel_list)
       FROM     (p_tabnam)
       INTO CORRESPONDING FIELDS OF TABLE <lt_outtab>
       WHERE    (lt_where)
       GROUP BY (lt_group)
       HAVING   (l_having)
       ORDER BY (lt_group).
					
* display of the results
LOOP AT <lt_outtab> ASSIGNING <ls_outtab>.
   LOOP AT comp_tab INTO comp_fld.
      ASSIGN COMPONENT comp_fld-name OF STRUCTURE <ls_outtab> TO <l_fld>.
      WRITE: <l_fld>.
   ENDLOOP.
   SKIP.
ENDLOOP.

Have a look at the link, this link will have lot of examples :-

http://www.susanto.id.au/papers/DynOpenSQL.asp

Regards

Sudheer

Read only

Former Member
0 Likes
1,525

try this..

parameters : p_field like dd03l-fieldname.

select ( p_field ) from ztable into v_var.