Announcement

Collapse
No announcement yet.

Select into nested table

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select into nested table

    Hallo zusammen,
    bräuchte wieder kurz eure Hilfe. Ich habe einen NESTED TABLE und möchte in diese einen SELECT INTO machen. Die Idee dahinter ist, dass ich später (in einem anderen Procedure) die Daten vom NESTED TABLE aufrufen kann ohne die Tabelle direkt anzusprechen. Natürlich packe ich das ganze in ein PACKAGE.

    Leider bekomme ich hier den Fehler:
    ORA-00932: Inkonsistente Datentypen: - erwartet, - erhalten
    ORA-06512: in "HOSSEINM.CREATE_TAB1", Zeile 13
    ORA-06512: in Zeile 1

    Hier mein Code:

    Code:
    CREATE OR REPLACE TYPE stat_tab_object IS OBJECT(z_col NUMBER, v_col1 NUMBER, v_col2 NUMBER);
    /
    
    CREATE OR REPLACE PROCEDURE create_tab1(table_in IN VARCHAR2,column1 IN VARCHAR2,column2 IN VARCHAR2,column3 IN VARCHAR2)
    IS
    TYPE cur_crosstab IS REF CURSOR; 
    cur_cross cur_crosstab;
    
    TYPE stat_tab IS TABLE OF stat_tab_object;
    stat_tab_table stat_tab;
    
    BEGIN
    
    OPEN cur_cross FOR 'SELECT '||column1||','||column2||','||column3|| ' FROM '||table_in;
    
    FETCH cur_cross BULK COLLECT INTO stat_tab_table;
    FOR i IN stat_tab_table.FIRST..stat_tab_table.LAST LOOP
     dbms_output.put_line(TO_CHAR(stat_tab_table(i).z_col,'99.9')|| ' '||TO_CHAR(stat_tab_table(i).v_col1,'99.9')||' '||TO_CHAR(stat_tab_table(i).v_col2,'99.9'));
    END LOOP;
    CLOSE cur_cross;
    END create_tab1;
    /

  • #2
    Du musst den Cursor nur auf den erwarteten Typ casten, dann klappts:
    Code:
    ...
    OPEN cur_cross FOR 'SELECT 
      stat_tab_object('||column1||','||column2||','||column3||') FROM '||table_in;
    ...

    Comment

    Working...
    X