如果全局声明了“关联数组变量” ,则可以在OPEN CURSOR USING
语句中使用它。
如果在 package中声明了“关联数组变量” ,而在OPEN CURSOR USING
语句中使用,则会出现编译错误。
下面提供了更多详细信息
我将一些值存储在一个关联数组变量中。稍后通过将它们带入 Cursor 来迭代这些值,如下所示,
strQuery := 'select DISTINCT column_value from table(CAST(:v_Assoc_Collection AS AssocArray_Date_t))';
OPEN RefCur_Item FOR strQuery USING v_Assoc_Collection;
在这里,我使用了关联数组变量“v_Assoc_Collection”,它是“AssocArray_Date_t”的一种。
如果我在包 [] 之外声明了“AssocArray_Date_t”类型CREATE OR REPLACE TYPE AssocArray_Date_t IS TABLE OF DATE;
,那么它工作正常。
但是,如果我在过程中声明类型,则会出现编译错误。
错误:PLS-00457:表达式必须是 SQL 类型。在:“使用 v_Assoc_Collection 为 strQuery 打开 RefCur_Item;”
错误:PL/SQL:语句被忽略。在:“使用 v_Assoc_Collection 为 strQuery 打开 RefCur_Item;”
作为参考,下面提供了代码,
-- 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;