Twój problem to w rzeczywistości błąd PLS-00642, a nie ORA-22905. Zasadniczo nie można używać lokalnych typów kolekcji w instrukcjach SQL. Dlatego rozwiązaniem jest zdefiniowanie typów na poziomie schematu. Definiując typy w ten sposób, nie możemy użyć składni %TYPE, zamiast tego musimy jawnie zdefiniować kolumnę (Pojawia się błąd PLS-00201 podczas tworzenia typu w Oracle ) tj.
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;
Następnie musisz jawnie przekonwertować wartości na odpowiedni typ, aby wykonać zbiorcze gromadzenie danych, jak wspomniano tutaj:ORA-00947 Za mało wartości podczas globalnego deklarowania typu .
Twoja procedura wyglądałaby zatem mniej więcej tak:
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;