Application Development 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: 

Dynamic Select Statement......

Former Member
0 Kudos

Hi,

I am writing this dynamic select statement.

SELECT (W_FIELDLIST) FROM (P_TNAME) INTO <FS_DYNTABLE> WHERE KUNNR = P_KUNNR

I am getting runtime error for this statement. I passed three different values too W_FIELDLIST but none

is working.

W_FILEDLIST = KUNNR LAND1 NAME1 ORT01 TELF1 and also

W_FILEDLIST = KUNNR, LAND1, NAME1, ORT01, TELF1 and also

W_FILEDLIST = KUNNR,LAND1,NAME1,ORT01,TELF1.

What is the correct format?

Help will be appreciated..

Thanks,

Ibrahim

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Mohammed,

You have to add each field as a separte row to an internal table.

DATA : BEGIN OF w_fieldlist OCCURS 0,

fld(1028) type c,

END OF w_fieldlist.

w_fieldlist-fld = 'KUNNR'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'LAND1'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'NAME1'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'ORT01'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'TELF1'.

append w_fieldlist.

clear w_fiedllist.

Regards,

Anil

17 REPLIES 17

Former Member
0 Kudos

Try this way.

Data: fld TYPE TABLE OF STRING. 

APPEND 'KUNNR' TO fld. 
APPEND 'LAND1'  TO fld. 

SELECT (fld) FROM (P_TNAME) INTO <FS_DYNTABLE> WHERE KUNNR = P_KUNNR

Former Member
0 Kudos

Hi,

Ur first format is the correct one.

W_FILEDLIST = KUNNR LAND1 NAME1 ORT01 TELF1 and also

chk the declaration of W_FIELDLIST, is it string?

0 Kudos

Hi,

I changed it to string but still its not working. I tried by hard coding the values of FROM table and INTO table but still i am getting the same error.

Thanks,

Ibrahim

0 Kudos

Hi, Mohammed Ibrahim

Have you tested my Code it must work for you,

Please Reply if any Issue,

Kind Regards,

Faisal

0 Kudos

Hey Faisal,

I tried whatever u asked me but its not working.

Thanks,

Ibrahim

0 Kudos

Hi, Muhammad,

Please Test the following Sample Code hope will help you.

DATA: it_vbak LIKE STANDARD TABLE OF vbak WITH HEADER LINE.
DATA: $fields TYPE string,
      $dbtable TYPE string,
      $where TYPE string,
      $it TYPE string,
      lv_tabname TYPE string,
      lv_ttabname TYPE string.
lv_tabname = 'vbap'.
lv_ttabname = 'vbak'.
CONCATENATE: 'vbak~vbeln' 'vbak~erdat' INTO $fields SEPARATED BY space,
             lv_tabname 'inner join ' lv_ttabname ' on ( vbap~vbeln = vbak~vbeln )' INTO $dbtable SEPARATED BY space,
             'vbap~vbeln eq ''0000000001''' 'or' 'vbap~vbeln eq ''0000000002''' INTO  $where SEPARATED BY space.
SELECT ($fields)
  INTO CORRESPONDING FIELDS OF TABLE it_vbak
  FROM ($dbtable)
  WHERE ($where).

LOOP AT it_vbak INTO it_vbak.
  WRITE: / it_vbak-vbeln, it_vbak-erdat.
ENDLOOP.

Please Let me know if above is not working too.

Kind Regards,

Faisal

0 Kudos

Hey Faisal,

I dont need to use joins as i am fetching the data from one table only and i cannot use Concatenate statement because the field names are coming from the selection screen.

Thanks,

Ibrahim

0 Kudos

Hi,

Than Please test following Sample Code where Suppose you are entering in the parameter VBELN ERDAT.

PARAMETERS: fields TYPE string.

DATA: it_vbak LIKE STANDARD TABLE OF vbak WITH HEADER LINE.
DATA: $fields TYPE string.

$fields = fields.

SELECT ($fields) from vbak
  INTO CORRESPONDING FIELDS OF TABLE it_vbak.

loop at it_vbak INTO it_vbak.
  WRITE: / it_vbak-vbeln, it_vbak-erdat.
ENDLOOP.

Please Reply if else Issue,

Kind Regards,

Faisal

Former Member
0 Kudos

Hi Mohammed,

You can select list of fields as given below, this will work perfectly.

DATA: it_fieldlist TYPE TABLE OF fieldname,
          wa_fieldlist LIKE LINE OF it_fieldlist.

wa_fieldlist = 'KUNNR'.
APPEND wa_fieldlist TO it_fieldlist.

wa_fieldlist = 'LAND1'.
APPEND wa_fieldlist TO it_fieldlist.

"Like this append all the fields you want.
"Then write the query as 

SELECT (it_fieldlist) FROM (p_tname) INTO <fs_dyntable> WHERE kunnr = p_kunnr.

Regards,

Manoj Kumar P

former_member222860
Active Contributor
0 Kudos

Hi,

U can use this:

W_FILEDLIST = KNA1~KUNNR KNA1~LAND1 KNA1~NAME1 KNA1~ORT01 KNA1~TELF1

viquar_iqbal
Active Contributor
0 Kudos

Hi

w_fieldlist need not be string type just char type with enough space

W_FILEDLIST = KUNNR LAND1 NAME1 ORT01 TELF1

or concatenate KUNNR LAND1 NAME1 ORT01 TELF1 into w_filedlist separated by space.

Try hard coding other dynamic options in your select statement like table name ,FS_DYNTABLE

and then check .

Hope it helps!

Viquar Iqbal

Former Member
0 Kudos

Hi Mohammed,

You have to add each field as a separte row to an internal table.

DATA : BEGIN OF w_fieldlist OCCURS 0,

fld(1028) type c,

END OF w_fieldlist.

w_fieldlist-fld = 'KUNNR'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'LAND1'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'NAME1'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'ORT01'.

append w_fieldlist.

clear w_fiedllist.

w_fieldlist-fld = 'TELF1'.

append w_fieldlist.

clear w_fiedllist.

Regards,

Anil

0 Kudos

Hey Anil,

thnx

Edited by: mohammed ibrahim on Feb 24, 2009 4:11 PM

faisal_altaf2
Active Contributor
0 Kudos

Hi,

Please Test my Sample Code in the following Thread this will Solve out your problem

[Dynamic Select Statement |;

Please Reply if any Issue,

Kind Regards,

Faisal

Former Member
0 Kudos

Hi Mohammed,

As I have mentioned above fill an int table with field names and use that in the select query.

Refer my first post of this thread.

Regards,

Manoj Kumar P

Former Member
0 Kudos

Try this,

Data: w_fieldlist TYPE TABLE OF STRING.

Append the values to w_fieldlist.

Regards,

Joan

Former Member
0 Kudos

Hey Anil....u were right dear.

Thanks everyone