Ihr Problem ist eigentlich ein PLS-00642-Fehler und kein ORA-22905. Im Wesentlichen können Sie keine lokalen Sammlungstypen in SQL-Anweisungen verwenden. Die Lösung besteht daher darin, Ihre Typen auf Schemaebene zu definieren. Wenn wir Typen auf diese Weise definieren, können wir die %TYPE-Syntax nicht verwenden und müssen stattdessen die Spalte explizit definieren (Fehler PLS-00201 beim Erstellen eines Typs in Oracle ) d.h.
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;
Sie müssen die Werte dann explizit in den relevanten Typ konvertieren, um die Massenerfassung wie hier erwähnt durchzuführen:ORA-00947 Nicht genügend Werte beim globalen Deklarieren des Typs .
Ihr Vorgehen würde also etwa so aussehen:
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;