Error: PLS-00642: local collection types not allowed in SQL statements
Error: PLS-00642: local collection types not allowed in SQL statements
我想从一个 table 中检索数据,该变量在一个变量中有多个值,并且在该变量上有 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 子句?
将类型创建为模式对象。但是,您不能从 table (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
我想从一个 table 中检索数据,该变量在一个变量中有多个值,并且在该变量上有 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 子句?
将类型创建为模式对象。但是,您不能从 table (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