2014 Nov 11 3:18 PM
Hello Experts,
I have got a requirement in which I have to fetch the table name from table TAB1 and fields from table TAB2.
I am not sure which all fields will be present in TAB2 and hence I cannot do a Select * on TAB1. I have to select only those fields which are mentioned in TAB2.
Can anyone suggest which logic with some code so that this requirement can be fulfilled.
Thanks
Jaydeep
2014 Nov 11 4:24 PM
hi jaydeep,
do you mean to say that TAB1 has table names and TAB2 has corresponding fields?
Your requirement is to make a select query based on the parameter of table name from TAB1 isnt't?
2014 Nov 11 3:39 PM
Hello,
Have a look at this:
DATA: itab TYPE STANDARD TABLE OF spfli,
wa LIKE LINE OF itab.
DATA: line(72) TYPE c,
list LIKE TABLE OF line(72).
parameters: p_table(30) type c default 'T001'.
line = ' CITYFROM CITYTO '.
APPEND line TO list.
SELECT DISTINCT (list)
INTO CORRESPONDING FIELDS OF TABLE (p_table)
FROM spfli.
IF sy-subrc EQ 0.
LOOP AT itab INTO wa.
WRITE: / wa-cityfrom, wa-cityto.
ENDLOOP.
ENDIF.
(most parts copied from How can we give dynamic table name in select statement?)
br,
Nikolaus
2014 Nov 11 4:24 PM
hi jaydeep,
do you mean to say that TAB1 has table names and TAB2 has corresponding fields?
Your requirement is to make a select query based on the parameter of table name from TAB1 isnt't?
2014 Nov 12 6:33 AM
Yes Abdul. First line of your statement is right.
I will have to pick up only those fields from table which will be mentioned in TAB2.
2014 Nov 12 8:21 AM
I got the way out guys with help of Nikolaus Harrich.
DATA: line(72) TYPE c,
list LIKE TABLE OF line(72).
*ITAB2
LOOP AT gt_fields INTO gs_fields.
MOVE gs_fields-field_name TO line.
APPEND line TO list.
ENDLOOP.
*ITAB1
READ TABLE gt_table INTO gs_table INDEX 1.
IF sy-subrc = 0.
IF gs_table-where2 IS NOT INITIAL.
MOVE gs_table-where2 TO line.
ENDIF.
IF gs_table-where3 IS NOT INITIAL.
CONCATENATE line 'AND' INTO line SEPARATED BY space.
CONCATENATE line gs_table-where3 INTO line SEPARATED BY space.
ENDIF.
ENDIF.
* SELECT data FROM table.
SELECT (list)
INTO CORRESPONDING FIELDS OF TABLE <dyn_table>
FROM (p_table)
WHERE (line).
Thanks Nikolaus !