Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment puis-je sélectionner un type de table d'enregistrements collectés en masse

Votre problème est en fait une erreur PLS-00642, plutôt que ORA-22905. Essentiellement, vous ne pouvez pas utiliser les types de collection locaux dans les instructions SQL. La solution consiste donc à définir vos types au niveau du schéma. Lors de la définition des types de cette manière, nous ne pouvons pas utiliser la syntaxe %TYPE et devons à la place définir explicitement la colonne (Obtention de l'erreur PLS-00201 lors de la création d'un type dans Oracle ) c'est-à-dire

create or replace type rec_type as object (
  COLUMN_1 integer,
  COLUMN_2 varchar2(128)
);

create or replace type tab_type as table of rec_type;

Vous devez ensuite convertir explicitement les valeurs dans le type pertinent afin d'effectuer la collecte en masse comme mentionné ici :ORA-00947 Pas assez de valeurs lors de la déclaration globale du type .

Votre procédure ressemblerait donc à ceci :

PROCEDURE MYPROC((PARAMS))AS
  TABLE_1 TAB_TYPE;
  lCount  integer;
BEGIN

  SELECT  REC_TYPE(COLUMN_A, COLUMN_B)
  BULK COLLECT INTO TABLE_1 
  FROM  TABLE_A;

  SELECT COUNT(*) INTO lCount FROM TABLE(TABLE_1);
END MYPROC;