問題は、実際には、ORA-22905ではなくPLS-00642エラーです。基本的に、SQLステートメントでローカルコレクションタイプを使用することはできません。したがって、解決策は、スキーマレベルで型を定義することです。この方法でタイプを定義する場合、%TYPE構文を使用することはできず、代わりに列を明示的に定義する必要があります(oracleでタイプの作成中にPLS-00201エラーが発生する )つまり
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;