Dynamic nametable of a select query

Hi all!
I have a question for you.
I have a table called "Temp1" with column (nameTable varchar(300), id integer).
What i must do is make a select from the table named as contained in the field nameTable of table Temp1.
something like
select * from (VALUEOF(select nameTable from temp1 where id = 1));
can u help me giving a suggest
or a documentation were i can find info about this stuff?
thank u for the answer
Francesco

create table temp (id number, tabname varchar2(30))
drop table test1;
create table test1 (id number, col varchar2(30))
drop table test2;
create table test2(id number, col varchar2(30))
insert into temp values (1,'TEST1');
insert into temp values (2,'Test2');
insert into test1 values (1,'TEST1_colvalue');
insert into test2 values (2,'TEST2_colvalue');
commit;
select * from temp;
select * from test1 ;
select * from test2;
DECLARE
v_sql varchar2 (200);
TYPE Tab_Typ IS TABLE OF TEMP%ROWTYPE;
TABRec Tab_Typ;
TYPE TTab_Typ IS TABLE OF TEST1%ROWTYPE;
TESTRec TTab_Typ;
BEGIN
v_sql := 'SELECT * FROM TEMP ';
DBMS_OUTPUT.put_line ('Program Begin');
EXECUTE IMMEDIATE v_sql BULK COLLECT INTO TABRec;
FOR i IN 1 .. TABREC.COUNT
LOOP
DBMS_OUTPUT.put_line ('Temp id =' || TABREC (i).Id);
v_Sql := 'select * From ' || TABREC (i).TABNAME;
DBMS_OUTPUT.put_line (v_sql);
EXECUTE IMMEDIATE v_Sql BULK COLLECT INTO TESTRec;
FOR i IN 1 .. TESTRec.COUNT
LOOP
DBMS_OUTPUT.put_line (TESTRec (i).col);
END LOOP;
END LOOP;
END;
Edited by: ranjus on Oct 16, 2008 2:20 PM
Here is the tips for the same.
http://www.oracle.com/technology/oramag/code/tips2005/042505.html

Similar Messages

  • Dynamic From statement in select query and/or outer join not working

    Dear Experts, I have a select query where the select columns are dynamic, the where condition is also dynamic. It is of the below format:
    Select (dynamic columns) INTO <wa>
    FROM a inner join b on af1 = bf1
    inner join c on af2 = cf2......
    WHERE (dynamic conditios)
    ORDER BY ( dynamic sort condition).
    Now I have to include some tables (dynamically depending on the user input) in the inner join statement which will give description for the selected fields. And these database tables may or may no be empty. So in this case, my select query will not return any data if these tables are empty. And I dont want that.
    I tried using outer join for the extra tables but it gave me a runtime error. I also tried forming the inner join statement dynamically but it was not supporting.
    Kindly give me pointers.
    Thanks

    Hey thanks for the reply, but the problem is not solved.
    I am already using  ( fileds, value) like table in my where condition and the select statement was working properly.
    the problem is that now I have to include some tables in the join statement which can be empty and so i want to use Outer join.
    But I am getting a runtime error as below:
    Error analysis
        An exception occurred that is explained in detail below.
        The exception, which is assigned to class 'CX_SY_DYNAMIC_OSQL_SYNTAX', was not
         caught in
        procedure "ZATSCSNG_RFC_READ_TABLE" "(FUNCTION)", nor was it propagated by a
         RAISING clause.
        Since the caller of the procedure could not have anticipated that the
        exception would occur, the current program is terminated.
        The reason for the exception is:
        The running ABAP program wanted to execute a SELECT statement whose
        WHERE condition was (partly) specified dynamically. The part that is
        specified in an internal table at runtime is compared to a field of the
        right table of an LEFT OUTER JOIN. Such comparisons are not supported by
         all database systems and are therefore not allowed.

  • Sender JDBC Dynamic parameter value in select query

    Hi All,
    I have a scnario where i have read only acess to a table and We cannot use stored procedures..
    Interface is JDBC to file.
    Now there is one filed in the table which holdes the system date and time.Ex filed name as Sysdate.
    now can i use  query as select * from table1 where Sysdate = x+1.
    where X is the last process Sysdate field value.. is there any work arround to store the value in a file and check dynamically every time from that file to get the value of x and after that X+1 value has to be updated back to that file..
    main aim is to eliminate duplicate entries.
    Regards
    Vijay

    Hi suraj,
    thanks for the reply i have proposed the same for the requirement but there is no acess to update the table all we have is to read only the table.. so i get out one other way round to ensure the proper data has to be flow..
    Similarly there is one more where i have datetime field value  i need to break all entires on base of time and pick the values ...
    Even i proposed if you thre is no authorization to update the flag give me in flat file so that i can split the file by uisng java mapping..
    But its was badluck i have a table with few lak entries read only aces to the table and ensure data has to be properly flow with out any duplications and miss entries.. any approach that we can achive this..
    Regards
    Vijay
    Edited by: vijay Kumar on Apr 12, 2010 1:36 PM

  • Dynamic where clause in select query

    Hi
    I'm trying for a dynamic query and in the dynamic where clause i'm checking a field for constant.....for instance if i wanna to use WERKS EQ '0478' how to declare it in dync where clause. i tried for the following:
    SELECT  (TAB_FIELD) INTO TABLE DITAB UP TO 10 ROWS FROM (TAB_NAME) WHERE (CONDI).
    heree CONDI = 'werks eq 0287'   . in this case the query fails as the werks shud be equal to '0287' and not just 0287. How to handle this? i tried for the following
    CONDI = 'werks eq " '0287' " ' but no luck as it is not a valid stmt as i knew.

    hi prabhu,
    this is how u select dynamically...
    DATA: COND(72) TYPE C,
    ITAB LIKE TABLE OF COND.
    PARAMETERS: CITY1(10) TYPE C, CITY2(10) TYPE C.
    DATA WA TYPE SPFLI-CITYFROM.
    CONCATENATE 'CITYFROM = ''' CITY1 '''' INTO COND.
    APPEND COND TO ITAB.
    CONCATENATE 'OR CITYFROM = ''' CITY2 '''' INTO COND.
    APPEND COND TO ITAB.
    CONCATENATE 'OR CITYFROM = ''' 'BERLIN' '''' INTO COND.
    APPEND COND TO ITAB.
    LOOP AT ITAB INTO COND.
    WRITE COND.
    ENDLOOP.
    SKIP.
    SELECT CITYFROM
    INTO WA
    FROM SPFLI
    WHERE (ITAB).
    WRITE / WA.
    ENDSELECT.
    regards,
    sohi

  • Dynamic %HINT ORACLE in select query

    Hi Experts,
    I am trying to implement given below code with dynamic % hint oracle
          SELECT vbeln posnr uepos
             FROM vbap INTO TABLE i_vbap
             FOR ALL ENTRIES IN i_vbak
              WHERE vbeln EQ i_vbak-vbeln
                %_hints oracle '&max_in_blocking_factor 500&&max_blocking_factor 500&'.
    I want value 500 dynamic,
    So far I have tried
    %hint oracle lv_oracle_string.
    %hint oracle (lv_oracle_string).
    WHERE (lv_oracle_string).     "where conditon with %_hints oracle '&max_in_blocking_factor 500&&max_blocking_factor 500&'.
    Any other ideas?
    Thanks in Advance

    Samuel,
    Thank you so much, whatever you mentioned, I have tried ealier, but it was giving me dump because of incorrect spacing in my string.
    Given below sloved my problem.
    CONCATENATE '''&max_in_blocking_factor ' lv_oracle '&&max_blocking_factor ' lv_oracle '&'''
              INTO lv_oracle_string RESPECTING BLANKS.
              SELECT vbeln posnr uepos
                 FROM vbap INTO TABLE i_vbap
                 FOR ALL ENTRIES IN i_vbak
                 WHERE vbeln EQ i_vbak-vbeln
                 %_hints oracle lv_oracle_string.
    Thanks you so much again. You Rock

  • How to pass the feild names of a select query dynamically?

    Hi
    How can we pass the feilds names in select query dynamically?
    For example in my selection screen i wil be giving the table name, and feilds in that table.....
    those feilds should be taken in my select query...
    instead of
    PARAMETERS : tab_name TYPE ddobjname .
      SELECT *
        FROM (tab_name)
        INTO TABLE <newtab>
       UP TO 25 ROWS.
    parametrs : feild1 like-------
                     feild2----
    i need select feild1 feild2 feild3    FROM (tab_name)
        INTO TABLE <newtab>
       UP TO 25 ROWS.

    by the way, contrary to popular belief there is no performance problem when using
    SELECT * FROM dbtab INTO CORRESPONDING FIELDS OF TABLE itab WHERE ...
    as long as the structure of itab contains only the required fields.
    I ran some benchmarks against this and above construct is maybe 0.1% slower (Oracle 10g) than a
    SELECT f1 f2 f3 f4 ... FROM dbtab INTO TABLE itab WHERE ...
    but is saves you from maintaining a potentially very long field list in your code. So when you need additional fields later on, you just add them to the DDIC structure or type definition and that's it.
    Maybe something you want to factor in here.
    Cheers
    Thomas

  • How to create a Type Object with Dynamic select query columns in a Function

    Hi Every One,
    I'm trying to figure out how to write a piplined function that executes a dynamic select query and construct a Type Object in order to assigned it to the pipe row.
    I have tried by
    SELECT a.DB_QUERY INTO actual_query FROM mytable a WHERE a.country_code = 'US';
    c :=DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(c,actual_query,DBMS_SQL.NATIVE);
    l_status := DBMS_SQL.EXECUTE(c);
    DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
    FOR j in 1..col_cnt LOOP
    DBMS_SQL.DEFINE_COLUMN(c,j,v_val,2000);
    END LOOP;
    FOR j in 1..col_cnt LOOP
    DBMS_SQL.COLUMN_VALUE(c,j,v_val);
    END LOOP;
    But got stuck, how to iterate the values and assign to a Type Object from the cursor. Can any one guide me how to do the process.
    Thanks,
    mallikj2

    Hi Justin,
    First of thanks for your reply, and coming to my requirement, I need to report the list of items which are there in the dynamic select statement what am getting from the DB. The select statement number of columns may vary in my example for different countries the select item columns count is different. For US its '15', for UK it may be 10 ...like so, and some of the column value might be a combination or calculation part of other table columns (The select query contains more than one table in the from clause).
    In order to execute the dynamic select statement and return the result i choose to write a function which will parse the cursor for dynamic query and then iterate the values and construct a Type Object and append it to the pipe row.
    Am relatively very new for these sort of things, welcome in case of any suggestions to make it simple (Instead of the function what i thought to work with) also a sample narrating the new procedure will be appreciated.
    Thanks in Advance,
    mallikj2.

  • Dynamic Select Query including Dynamic Tables with For all Entries

    Hello everyone,
    I need to create a select query which involves using of Dynamic Tables.
    Suppose I have a dynamic table <d1> which consist of let say 10 records.
    Now i need to make a select query putting data into another dynamic table <d2>
    CONCATENATE keyfield '=' '<d1>' INTO g_condition SEPARATED BY space.
    CONCATENATE g_condition '-' keyfield INTO g_condition.
    SELECT * FROM (wa_all_tables-name) INTO CORRESPONDING FIELDS OF TABLE <d1>
            FOR ALL ENTRIES IN <d1>
    WHERE (g_condition).
    But it is giving dump.
    Please help me on this....

    Short text
        A condition specified at runtime has an unexpected format.
    What happened?
        Error in the ABAP Application Program
        The current ABAP program "ZNG_CUSTOMWRITE" had to be terminated because it has
        come across a statement that unfortunately cannot be executed.
    Error analysis
        An exception occurred that is explained in detail below.
        The exception, which is assigned to class 'CX_SY_DYNAMIC_OSQL_SEMANTICS', was
         not caught in
        procedure "WRITE_ARCHIVE_PROD" "(FORM)", nor was it propagated by a RAISING
         clause.
        Since the caller of the procedure could not have anticipated that the
        exception would occur, the current program is terminated.
        The reason for the exception is:
        The current ABAP program has tried to execute an Open SQL statement
        which contains a WHERE, ON or HAVING condition with a dynamic part.
        The part of the WHERE, ON or HAVING condition specified at runtime in
        a field or an internal table, contains the invalid value "ZCOURIER-ZCOURIERID".
    CONCATENATE keyfield '=' g_header INTO g_condition SEPARATED BY space.
    CONCATENATE g_condition '-' keyfield INTO g_condition.
    SELECT * FROM (wa_all_tables-name) INTO CORRESPONDING FIELDS OF TABLE <dyn_table1>
    FOR ALL ENTRIES IN <dyn_table>
      WHERE (g_condition).

  • Dynamic Select query is failing with error "Invalid Table Name"

    OPEN rc FOR 'SELECT count(*) from :s' USING tab_name;
    fetch rc into rec_count;
    CLOSE rc;
    my requirement is to build dynamic select query to retrieve the total count of rows in each table ( variable tab_name contains the table_name )
    But I am getting stuck by this errror, not sure if there is any alternative !
    ORA-00903: invalid table name
    ORA-06512: at line 43

    OPEN rc FOR 'SELECT count(*) from '||tab_name;
    fetch rc into rec_count;
    CLOSE rc;
    -- This will work
    1. Create a sql statement.
    2. Open ref cursor for that statement.

  • Dynamic field in select query

    Hi Team,
    I have to select dynamic fields from database table GLT0.
    This depends on period value given on screen.
    If period is 01 then fields will be hsl01.
    If period is 02 then fields will be hsl01 and hsl02.
    If period is 03 then fields will be hsl01,hsl02 and hsl03 .
    so on...till 12..
    My code is throwing exception at select query.
    "Error in module RSQL of the database interface."
    My code :
    *"      Type declaration to store field name as per given period
    TYPES : BEGIN OF y_fieldname        ,
               fieldname(10)  TYPE c    ,
             END OF y_fieldname         .
    data  t_fieldname  TYPE  STANDARD TABLE OF y_fieldname   .
      DO p_monat TIMES.
         clear w_count .
          MOVE sy-index TO w_count
          IF sy-index LE c_9.
            CONCATENATE c_hsl
                        c_0
                        w_count
            INTO      e_fieldname-fieldname.
            APPEND e_fieldname TO t_fieldname.
          ELSE.
            CONCATENATE c_hsl
                        w_count
            INTO     e_fieldname-fieldname.
            APPEND e_fieldname TO t_fieldname.
          ENDIF.
        ENDDO.
      Get Local Currency Amounts
      from table glt0 depending on period
        SELECT (t_fieldname)
          FROM glt0
          INTO TABLE t_glto_with_saknr
          FOR ALL ENTRIES IN t_bukrs
         WHERE rldnr EQ c_00
           AND rrcty EQ c_0
           AND rvers EQ c_001
           AND bukrs EQ t_bukrs-bukrs
           AND ryear EQ p_gjahr
           AND racct IN r_saknr.
    Please guide me.
    Thanking u in advance.
    Sangeeta Verma

    Hi Asik,
    I m selecting all fields now as suggestd by u so in one record i have hsl01 to hsl12.
    I have to calculate balance into e_glt0_bal-bal .This balance is summation of e_glt0_bal-hsl01 till  e_glt0_bal-hsl12 (depending on monat).
    I m using logic in process then
    my code now :
    data:    w_monat_bal type string  .
              DO p_monat TIMES.
                MOVE c_01 TO w_count .
                CONCATENATE 'e_glt0_bal-hsl'
                             w_count
                       INTO w_monat_bal.
                ASSIGN w_monat_bal TO <fs_monat_bal>.
                e_glt0_bal-bal = e_glt0_bal-bal + <fs_monat_bal>.
                w_count = w_count + c_01.
              ENDDO.
    But <fs_monat_bal> can not be added.
    Giving exception :
    Unable to interpret "e_glt0_bal-hsl01" as a number.
    If I do <fs_monat_bal> type GLT0-hslvt instead to type any
    Then assigning from w_monat_bal  is not possible.

  • Absolute dynamic select query with dynamic join and where

    Has anyone ever tried creating an absolutely dynamic SELECT query with dynamic Join and Where conditions.
    I have a requirement of creating such a query in an Utility Class, and i have written the code. But its throwing my sysntax errors.
    Please let me know where am I going wrong OR is it really possible to create such a dynamic Query??
        SELECT (FIELDS) INTO TABLE IT_TABLES
          FROM ( (ME->TABLE1)  inner join ( me->table2 )
          on ( on_condition ) )
          WHERE (me->where_fields).
    Ags.

    It worked for me in a following way:
    select * into corresponding fields of table <result_table>
            from (join_string)
            where (l_where).
    Where the contents of join_string were dynamically build using concatenation. So it will be something like
    concatenate ME->TABLE1 'as a INNER JOIN' me->table2 'as b ON (' into join_string separated by space.
    <...>
    add here matching/reference colums, something like
    concatenate 'a~' me->TABLE1_JOIN_COL into temp1.
    concatenate 'b~' me->TABLE2_JOIN_COL into temp2.
    concatenate join_string temp1 '=' temp2 into join_string separated by space.
    <...>
    concatenate join_string ')' into join_string separated by space.
    And then use similar approach for l_where variable.

  • How to use Field-symbol with dynamic select query

    Can anybody tell me, how to use field-symbols in the dynamic select query.

    FIELD-SYMBOLS <fs> { typing | STRUCTURE struc DEFAULT dobj }.
    1. ... typing
    2. ... STRUCTURE struc DEFAULT dobj
    The FIELD-SYMBOLS statement declares a field symbol <fs>. The name conventions apply to the name fs. The angle brackets of the field symbols indicate the difference to data objects and are obligatory. You can declare field symbols in any procedure and in the global declaration section of an ABAP program, but not in the declaration section of a class or an interface. You can use a field symbol in any operand position in which it is visible and which match the typing defined using typing.
    After its declaration, a field symbol is initial - that is, it does not reference a memory area. You have to assign a memory area to it (normally using the ASSIGN statement) before you can use it as an operand. Otherwise an exception will be triggered.
    eg.
    FIELD-SYMBOLS <fs> TYPE ANY.
    DATA: BEGIN OF line,
            string1(10) VALUE '0123456789',
            string2(10) VALUE 'abcdefghij',
          END OF line.
    WRITE / line-string1+5.
    ASSIGN line-string1+5(*) TO <fs>.
    WRITE / <fs>.
    output:
    56789
    56789
    reward if helpful
    anju

  • Dynamic select query with dynamic where condition

    Hi all,
    I want to use the dynamic select query with dynamic where condition. For that I used the below code but I am getting dump when using this code.
    Please advice, if there is any other way to achieve this requirement.
    Thanks,
    Sanket Sethi
    Code***************
    PARAMETERS: p_tabnam      TYPE tabname,
                p_selfl1      TYPE edpline,
                p_value       TYPE edpline,
                p_where1      TYPE edpline .
    DATA: lt_where    TYPE TABLE OF edpline,
          lt_sel_list TYPE TABLE OF edpline,
          l_wa_name   TYPE string,
          ls_where    TYPE edpline,
          l_having    TYPE string,
          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.
    FIELD-SYMBOLS : <lt_outtab> TYPE ANY TABLE,
    *                <ls_outtab> TYPE ANY,
                    <l_fld> TYPE ANY.
    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( ).
    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
    APPEND p_selfl1 TO lt_sel_list.
    APPEND 'COUNT(*) AS F_COUNT' TO lt_sel_list.
    ** Creation of the "where" clause
    *CONCATENATE p_selfl1 '= '' p_value ''.'
    *            INTO ls_where
    *            SEPARATED BY space.
    *APPEND ls_where TO lt_where.
    * Creation of the "where" clause
    APPEND p_where1 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).

    Hi Sanket,
    The above given logic of mine works for you, put the code in the If condition and try-
    just like below:
    IF NOT P_EBELN IS INITIAL.
    lt_where = '& = ''&'' '.
    REPLACE '&' WITH p_ebeln INTO lt_where.
    REPLACE '&' WITH field_value INTO lt_where.
    SELECT (lt_sel_list) INTO CORRESPONDING FIELDS OF TABLE <lt_outtab>
    FROM (p_tabnam)
    WHERE (lt_where).
    ENDIF.
    thanks\
    Mahesh

  • How to dynamically add field name in where clause of select query in web dynpro?

    Hello,
    Can any body tell me how i can use select query with dynamic wheere condition.
    i have a requirement like there are multiple input fields  and i want to select data from two database
    and condition may vary .

    Hi
    In the where clause you need to write like
    WHERE NAME LIKE 'DE%'
    Regards
    Sudheer

  • Regarding  dynamically assigning the where clause to select query

    hi,
      Please send the code regarding how to dynamically assign the where clause to select query.
    thanks in advance

    SELECT <fileds>
            INTO TABLE itab
            FROM dbase
            WHERE  condition.

Maybe you are looking for