'連想配列変数'がグローバルに宣言さOPEN CURSOR USING
れている場合、ステートメントでそれを使用できます。
「連想配列変数」がパッケージ内で宣言されている場合、ステートメントで使用してOPEN CURSOR USING
いるときにコンパイルエラーが発生します。
詳細は以下をご覧ください
1つの連想配列変数にいくつかの値を格納しています。後で、以下のようにカーソルにそれらを取り込んで、これらの値を繰り返します。
strQuery := 'select DISTINCT column_value from table(CAST(:v_Assoc_Collection AS AssocArray_Date_t))';
OPEN RefCur_Item FOR strQuery USING v_Assoc_Collection;
ここでは、「AssocArray_Date_t」のタイプである連想配列変数「v_Assoc_Collection」を使用しました。
パッケージ[]の外でそのタイプ'AssocArray_Date_t'を宣言した場合CREATE OR REPLACE TYPE AssocArray_Date_t IS TABLE OF DATE;
、それは正しく機能しています。
しかし、プロシージャ内で型を宣言すると、コンパイルエラーが発生します。
エラー:PLS-00457:式はSQLタイプである必要があります。In: "OPEN RefCur_Item FOR strQuery USING v_Assoc_Collection;"
エラー:PL / SQL:ステートメントが無視されました。In: "OPEN RefCur_Item FOR strQuery USING v_Assoc_Collection;"
参考までに、コードを以下に示します。
-- Package Declaration
CREATE OR REPLACE PACKAGE AssocTypePackage
AS
Type CursorType IS REF CURSOR;
PROCEDURE AssocTypeProcedure(name IN VARCHAR2);
END;
-- Package Body
CREATE OR REPLACE PACKAGE BODY AssocTypePackage
AS
PROCEDURE AssocTypeProcedure(
name IN VARCHAR2
)
IS
strQuery VARCHAR2(4000);
v_Assoc_Collection AssocArray_Date_t := AssocArray_Date_t();
BEGIN
FOR i IN 1..5
LOOP
v_Assoc_Collection.EXTEND;
v_Assoc_Collection(v_Assoc_Collection.COUNT) := <<someDate>>;
END LOOP;
strQuery := 'select DISTINCT column_value from table(CAST(:v_Assoc_Collection AS AssocArray_Date_t))';
OPEN RefCur_Item FOR strQuery USING v_Assoc_Collection;
LOOP
-- ----
-- some processing
-- ----
END LOOP;
END AssocTypeProcedure;
END AssocTypePackage;