Вашият проблем всъщност е грешка PLS-00642, а не ORA-22905. По същество не можете да използвате типове локални колекции в SQL изрази. Следователно решението е да дефинирате вашите типове на ниво схема. Когато дефинираме типове по този начин, не можем да използваме синтаксиса %TYPE и вместо това трябва изрично да дефинираме колоната (Получаване на PLS-00201 грешка при създаване на тип в oracle ), т.е.
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;
След това трябва изрично да конвертирате стойностите в съответния тип, за да извършите груповото събиране, както е споменато тук:ORA-00947 Няма достатъчно стойности при глобално деклариране на тип .
Следователно вашата процедура ще изглежда така:
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;