Mit Oracle-PL/SQL-Tabelle der Datensatz mit mehreren %rowtype Felder

wie kann ich füllen eine Tabelle der Datensätze, die mehr als ein Feld von %rowtype mit bulk collect?

mein code:

      drop table child_table;
      drop table parent_table;
      /
      create table parent_table(pk number primary key);
      create table child_table(pk number primary key, fk REFERENCES parent_table(pk));
      /
      insert into parent_table (pk) values (1);
      insert into parent_table (pk) values (2);

      insert into child_table (pk, fk) values (11, 1);
      insert into child_table (pk, fk) values (21, 1);
      insert into child_table (pk, fk) values (32, 2);
      /
      declare

        type rec is record
        (
          parent parent_table%rowtype,
          child child_table%rowtype
        );
        type tbl is table of rec;
        v_table tbl := tbl();

        -- this works
        type tbl_parent is table of parent_table%rowtype;
        v_parent_table tbl_parent := tbl_parent();

      begin
        -- this works
        select * bulk collect into v_parent_table from parent_table;

        -- this doesn't work
        select * bulk collect into v_table from parent_table parent 
        inner join child_table child on parent.pk = child.fk;

      end;

dass dieser code nicht funktioniert, wirft aber folgende Fehlermeldung:

ORA-06550: line 13, column 30:
PLS-00597: expression 'V_TABLE' in the INTO list is of wrong type
ORA-06550: line 13, column 30:
PLS-00597: expression 'V_TABLE' in the INTO list is of wrong type
ORA-06550: line 13, column 38:
PL/SQL: ORA-00904: : invalid identifier
ORA-06550: line 13, column 3:
PL/SQL: SQL Statement ignored

also ok, das Orakel sagt im mit den falschen Datentyp und dem Stimme ich zu. aber wie kann man es beheben?

select * from a join b nicht geben Sie einzelne Zeilen, die Sie aufteilen können, wie das, wie ich glaube, Sie realisieren. Gibt es einen Grund, Sie können nicht explizit Liste der Felder aus beiden Tabellen (oder zumindest diejenigen, die Sie tatsächlich abrufen möchten) in den record-definition, mit %type eher als %rowtype? Andere als die, die es benötigen, Tippen mehr, offensichtlich...

InformationsquelleAutor Jakob | 2013-05-22

Schreibe einen Kommentar