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

Table name as variable with NATIVE SQL in ABAP

0 Likes
1,105

Hi all,

I am trying to execute a SELECT statement in order to fetch data in Native and open SQL.

Example In Open Sql

DATA : it_T001 LIKE TABLE OF T001 WITH HEADER LINE.
DATA : wa_T001 LIKE T001.
PARAMETERS : TABNAME(30) TYPE C.
SELECT * FROM (TABNAME) INTO TABLE it_T001.

Similar stuff is not working for Native Sql :

Does anybody know if is possible to do that?

If not, is there any other solution?

1 ACCEPTED SOLUTION
Read only

GeorgeShlyakhov
Participant
0 Likes
781

Hi,

you can generate your own program with native SQL and paste table name in it. Try to code like this:


REPORT  ztest8.

PARAMETERS : tabname(30) TYPE c DEFAULT 'spfli'.

DATA:

  g_prog TYPE string,

  g_line TYPE string,

  g_tab  TYPE STANDARD TABLE OF string,

  g_mess TYPE string,

  g_sid  TYPE string.

APPEND 'PROGRAM subpool.'                      TO g_tab.

APPEND `DATA spfli_tab TYPE TABLE OF spfli.`   TO g_tab.

APPEND `LOAD-OF-PROGRAM.`                      TO g_tab.

APPEND `DATA: BEGIN OF wa,`                    TO g_tab.

APPEND `        connid   TYPE spfli-connid,`   TO g_tab.

APPEND `        cityfrom TYPE spfli-cityfrom,` TO g_tab.

APPEND `        cityto   TYPE spfli-cityto,`   TO g_tab.

APPEND `      END OF wa.`                      TO g_tab.

APPEND `DATA c1 TYPE spfli-carrid VALUE 'LH'.` TO g_tab.

APPEND `EXEC SQL PERFORMING loop_output.`      TO g_tab.

APPEND `  SELECT connid, cityfrom, cityto`     TO g_tab.

APPEND `  INTO   :wa`                          TO g_tab.

CONCATENATE `   FROM ` tabname INTO g_line.

APPEND g_line TO g_tab.

APPEND `  WHERE  carrid = :c1`                         TO g_tab.

APPEND `ENDEXEC.`                                      TO g_tab.

APPEND `FORM loop_output.`                             TO g_tab.

APPEND `  WRITE: / wa-connid, wa-cityfrom, wa-cityto.` TO g_tab.

APPEND `ENDFORM.`                                      TO g_tab.

GENERATE SUBROUTINE POOL g_tab NAME g_prog

         MESSAGE g_mess

         SHORTDUMP-ID g_sid.

IF sy-subrc = 0.

  PERFORM ('LOOP_OUTPUT') IN PROGRAM (g_prog) IF FOU

ELSEIF sy-subrc = 4.

  MESSAGE g_mess TYPE 'I'.

ELSEIF sy-subrc = 8.

  MESSAGE g_sid TYPE 'I'.

ENDIF.

ABAP source code in this document was coloured using the ABAP code lighter for SCN.

Best regards,

George Shlyahov

3 REPLIES 3
Read only

GeorgeShlyakhov
Participant
0 Likes
782

Hi,

you can generate your own program with native SQL and paste table name in it. Try to code like this:


REPORT  ztest8.

PARAMETERS : tabname(30) TYPE c DEFAULT 'spfli'.

DATA:

  g_prog TYPE string,

  g_line TYPE string,

  g_tab  TYPE STANDARD TABLE OF string,

  g_mess TYPE string,

  g_sid  TYPE string.

APPEND 'PROGRAM subpool.'                      TO g_tab.

APPEND `DATA spfli_tab TYPE TABLE OF spfli.`   TO g_tab.

APPEND `LOAD-OF-PROGRAM.`                      TO g_tab.

APPEND `DATA: BEGIN OF wa,`                    TO g_tab.

APPEND `        connid   TYPE spfli-connid,`   TO g_tab.

APPEND `        cityfrom TYPE spfli-cityfrom,` TO g_tab.

APPEND `        cityto   TYPE spfli-cityto,`   TO g_tab.

APPEND `      END OF wa.`                      TO g_tab.

APPEND `DATA c1 TYPE spfli-carrid VALUE 'LH'.` TO g_tab.

APPEND `EXEC SQL PERFORMING loop_output.`      TO g_tab.

APPEND `  SELECT connid, cityfrom, cityto`     TO g_tab.

APPEND `  INTO   :wa`                          TO g_tab.

CONCATENATE `   FROM ` tabname INTO g_line.

APPEND g_line TO g_tab.

APPEND `  WHERE  carrid = :c1`                         TO g_tab.

APPEND `ENDEXEC.`                                      TO g_tab.

APPEND `FORM loop_output.`                             TO g_tab.

APPEND `  WRITE: / wa-connid, wa-cityfrom, wa-cityto.` TO g_tab.

APPEND `ENDFORM.`                                      TO g_tab.

GENERATE SUBROUTINE POOL g_tab NAME g_prog

         MESSAGE g_mess

         SHORTDUMP-ID g_sid.

IF sy-subrc = 0.

  PERFORM ('LOOP_OUTPUT') IN PROGRAM (g_prog) IF FOU

ELSEIF sy-subrc = 4.

  MESSAGE g_mess TYPE 'I'.

ELSEIF sy-subrc = 8.

  MESSAGE g_sid TYPE 'I'.

ENDIF.

ABAP source code in this document was coloured using the ABAP code lighter for SCN.

Best regards,

George Shlyahov

Read only

rosenberg_eitan
Active Contributor
0 Likes
781

Hi,

You can use cl_sql_connection cl_sql_statement and cl_sql_result_set .

See this post:


  
Regards.


Read only

0 Likes
781

Thank you all, solved the problem !!