Oracle 在store procedurce的Select语句中使用数组变量(从Execute Immediate中输出)
我需要在存储过程中的Select语句中使用数组变量(out from Execute Immediate)作为参数 将新类型创建为Varray(如下代码所示) 然后创建返回表的过程Oracle 在store procedurce的Select语句中使用数组变量(从Execute Immediate中输出),oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我需要在存储过程中的Select语句中使用数组变量(out from Execute Immediate)作为参数 将新类型创建为Varray(如下代码所示) 然后创建返回表的过程 CREATE OR REPLACE PROCEDURE SchemaName.ProcedureName (Query_String IN VARCHAR2, Ref_Cursor OUT SYS_REFCURSOR) AS BEGIN DECLARE COMCODE Array_LIST; BEGIN
CREATE OR REPLACE PROCEDURE SchemaName.ProcedureName
(Query_String IN VARCHAR2, Ref_Cursor OUT SYS_REFCURSOR)
AS
BEGIN
DECLARE COMCODE Array_LIST;
BEGIN
EXECUTE IMMEDIATE Query_String BULK COLLECT INTO COMCODE;
BEGIN
Open Ref_Cursor For
SELECT
Column1, Column2
From Table_Name
Where
Column1 IN (COMCODE);
END;
END;
END;
当我执行这个过程时,我得到了下面的错误
==> ORA-00932: inconsistent datatypes : expected NUMBER got Scheman_Name.Array_LIST
谁能帮帮我 在子句中的SQL
in中使用集合类型只存在一个小问题。不支持在
子句中直接在中使用集合类型。集合类型必须是TABLE
d才能在SQL中使用
这里有一个编译和执行ok的小修改:
CREATE TABLE TABLE_NAME(COLUMN1 VARCHAR2(32), COLUMN2 VARCHAR2(32));
CREATE OR REPLACE TYPE Array_LIST AS VARRAY(200) OF VARCHAR2(10);
CREATE OR REPLACE PROCEDURE ProcedureName
(Query_String IN VARCHAR2, Ref_Cursor OUT SYS_REFCURSOR)
AS
BEGIN
DECLARE COMCODE Array_LIST;
BEGIN
EXECUTE IMMEDIATE Query_String BULK COLLECT INTO COMCODE;
BEGIN
Open Ref_Cursor For
SELECT
Column1, Column2
From Table_Name
Where
Column1 IN (SELECT COLUMN_VALUE FROM TABLE(COMCODE));
END;
END;
END;
/
Procedure created.
然后它将执行ok:
DECLARE
V_CURSOR SYS_REFCURSOR;
BEGIN
PROCEDURENAME(Q'!SELECT 'LOREM IPSUM' FROM DUAL!',V_CURSOR);
END;
/
PL/SQL procedure successfully completed.
DECLARE
V_CURSOR SYS_REFCURSOR;
BEGIN
PROCEDURENAME(Q'!SELECT 'LOREM IPSUM' FROM DUAL!',V_CURSOR);
END;
/
PL/SQL procedure successfully completed.