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;