Dit problem er faktisk en PLS-00642-fejl snarere end ORA-22905. Grundlæggende kan du ikke bruge lokale samlingstyper i SQL-sætninger. Løsningen er derfor at definere dine typer på skemaniveau. Når vi definerer typer på denne måde, kan vi ikke bruge %TYPE-syntaksen, og skal i stedet definere kolonnen eksplicit (Få PLS-00201 fejl under oprettelse af en type i oracle ) 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 skal derefter eksplicit konvertere værdierne til den relevante type for at udføre masseindsamlingen som nævnt her:ORA-00947 Ikke nok værdier, mens type erklæres globalt .
Din procedure vil derfor se nogenlunde sådan ud:
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;