Ditt problem är faktiskt ett PLS-00642-fel snarare än ORA-22905. Du kan i huvudsak inte använda lokala samlingstyper i SQL-satser. Lösningen är därför att definiera dina typer på schemanivå. När vi definierar typer på det här sättet kan vi inte använda %TYPE-syntaxen, utan måste uttryckligen definiera kolumnen (Får PLS-00201-fel när en typ i oracle skapas ) dvs
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;
Du måste sedan uttryckligen konvertera värdena till den relevanta typen för att utföra massinsamlingen som nämns här:ORA-00947 Inte tillräckligt med värden när typ deklareras globalt .
Din procedur skulle därför se ut ungefär så här:
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;