02-24-2009 6:46 AM
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
02-24-2009 7:03 AM
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
02-24-2009 6:51 AM
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
02-24-2009 6:51 AM
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?
02-24-2009 7:10 AM
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
02-24-2009 7:12 AM
Hi, Mohammed Ibrahim
Have you tested my Code it must work for you,
Please Reply if any Issue,
Kind Regards,
Faisal
02-24-2009 7:15 AM
Hey Faisal,
I tried whatever u asked me but its not working.
Thanks,
Ibrahim
02-24-2009 7:17 AM
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
02-24-2009 7:35 AM
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
02-24-2009 7:50 AM
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
02-24-2009 6:58 AM
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
02-24-2009 6:59 AM
Hi,
U can use this:
W_FILEDLIST = KNA1~KUNNR KNA1~LAND1 KNA1~NAME1 KNA1~ORT01 KNA1~TELF1
02-24-2009 7:00 AM
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
02-24-2009 7:03 AM
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
02-24-2009 7:11 AM
Hey Anil,
thnx
Edited by: mohammed ibrahim on Feb 24, 2009 4:11 PM
02-24-2009 7:04 AM
02-24-2009 8:11 AM
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
02-24-2009 8:26 AM
Try this,
Data: w_fieldlist TYPE TABLE OF STRING.
Append the values to w_fieldlist.
Regards,
Joan
02-24-2009 10:40 AM