错误:PLS-00642:SQL语句中不允许使用本地集合类型

时间:2019-02-22 07:11:27

标签: sql oracle performance plsql cursor

我想从一个表中检索数据,该表具有一个变量中的多个值以及该变量上的where子句。

我的数据库版本为11.1

CREATE OR REPLACE PACKAGE BODY pr_retrieve_data as
PROCEDURE FETCH_MYTABLE_DETAILS() is

TYPE ACCNT_NUMBER_TYPE IS TABLE OF MYTABLE.MYCOLUMN%TYPE;
L_ACCNT_NUMBER ACCNT_NUMBER_TYPE;

L_ACCNT_NUMBER.EXTEND(3);
L_ACCNT_NUMBER(1) := 1;
L_ACCNT_NUMBER(2) := 2;
L_ACCNT_NUMBER(3) := 3;

FOR indx in (select column1,
                    column2
             from   SOMEOTHERTABLE SOT
             WHERE  SOT.ACCNT_NUMBER IN (SELECT * FROM TABLE(L_ACCNT_NUMBER))) --The code fails here with PLS-00642 error.
LOOP

...

END LOOP;

end FETCH_MYTABLE_DETAILS;
end pr_retrieve_data;

如何从SOMEOTHERTABLE中获取变量中具有多个值以及该变量的where子句的数据?

1 个答案:

答案 0 :(得分:4)

将类型创建为架构对象。但是,您不能从表(AS TABLE OF MYTABLE.MYCOLUMN%TYPE)继承数据类型:

CREATE OR REPLACE TYPE ACCNT_NUMBER_TYPE AS TABLE OF NUMBER;

请注意,在较新的Oracle版本中,您也可以在SQL中使用本地集合类型。该功能是在12.1版中引入的。

在特定情况下,您也可以使用

...
WHERE SOT.ACCNT_NUMBER MEMBER OF L_ACCNT_NUMBER