Masalah Anda sebenarnya adalah kesalahan PLS-00642, bukan ORA-22905. Pada dasarnya Anda tidak dapat menggunakan tipe koleksi lokal dalam pernyataan SQL. Oleh karena itu, solusinya adalah mendefinisikan tipe Anda di tingkat skema. Saat mendefinisikan tipe dengan cara ini, kita tidak dapat menggunakan sintaks %TYPE, dan sebaliknya harus mendefinisikan kolom secara eksplisit (Mendapatkan kesalahan PLS-00201 saat membuat tipe di oracle ) yaitu
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;
Anda kemudian perlu secara eksplisit mengonversi nilai menjadi jenis yang relevan untuk melakukan pengumpulan massal seperti yang disebutkan di sini:ORA-00947 Nilai tidak cukup saat mendeklarasikan tipe secara global .
Oleh karena itu, prosedur Anda akan terlihat seperti ini:
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;