Sự cố của bạn thực sự là lỗi PLS-00642 chứ không phải ORA-22905. Về cơ bản, bạn không thể sử dụng các kiểu tập hợp cục bộ trong các câu lệnh SQL. Do đó, giải pháp là xác định các kiểu của bạn ở cấp giản đồ. Khi xác định loại theo cách này, chúng tôi không thể sử dụng cú pháp% TYPE và thay vào đó, phải xác định rõ ràng cột ( Gặp lỗi PLS-00201 khi tạo một loại trong oracle ) tức là
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;
Sau đó, bạn cần chuyển đổi rõ ràng các giá trị thành loại có liên quan để thực hiện thu thập hàng loạt như đã đề cập ở đây: ORA-00947 Không đủ giá trị khi khai báo loại trên toàn cầu .
Do đó, thủ tục của bạn sẽ trông giống như sau:
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;