Uw probleem is eigenlijk een PLS-00642-fout, in plaats van ORA-22905. In wezen kunt u geen lokale verzamelingstypen gebruiken in SQL-instructies. De oplossing is daarom om uw typen op schemaniveau te definiëren. Wanneer we typen op deze manier definiëren, kunnen we de %TYPE-syntaxis niet gebruiken en moeten we in plaats daarvan expliciet de kolom definiëren (PLS-00201-fout ontvangen tijdens het maken van een type in Oracle ) d.w.z.
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;
U moet dan de waarden expliciet converteren naar het relevante type om de bulkverzameling uit te voeren zoals hier vermeld:ORA-00947 Niet genoeg waarden bij het wereldwijd declareren van type .
Uw procedure ziet er daarom ongeveer zo uit:
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;