L'utilisation d'Oracle PL/SQL de la table d'enregistrement avec plusieurs %rowtype champs

comment puis-je remplir un tableau d'enregistrements, qui a plus d'un champ d' %rowtype à l'aide de en vrac collecter?

mon 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;

ce code qui ne fonctionne pas, mais jette le message d'erreur suivant:

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

alors ok, oracle dit im en utilisant le mauvais type de données et je suis d'accord. mais comment le résoudre?

select * from a join b ne vous donne pas des lignes séparées, vous pouvez diviser comme ça, je pense que vous réalisez. Est-il une raison pour laquelle vous ne pouvez pas explicitement la liste des champs des deux tables (ou au moins ceux que vous voulez vraiment récupérer) dans la définition de l'enregistrement, avec %type plutôt que %rowtype? D'autres que celui-ci ait besoin de plus de frappe, évidemment...

OriginalL'auteur Jakob | 2013-05-22