我想将字符串列表传递给过程并在 select 语句的 WHERE 子句中使用它,但我不知道如何执行此操作。
我声明了以下嵌套表:
TYPE t_strarray IS TABLE OF VARCHAR2(30);
该过程如下所示:
PROCEDURE getstuff(p_list IN t_strarray, io_cursor OUT t_cursor)
IS
BEGIN
OPEN io_cursor FOR
SELECT * FROM mytable
WHERE mytable.field1 in (select * from table(p_list));
END;
如何才能做到这一点?
您的数组需要是直接在 SQL 中创建的 SQL 对象类型,而不是在包中声明的 PLSQL 类型:
SQL> CREATE OR REPLACE TYPE t_strarray IS TABLE OF VARCHAR2(30);
2 /
Type created.
SQL> CREATE TABLE mytable (field1 VARCHAR2(30));
Table created.
SQL> INSERT INTO mytable VALUES ('A');
1 row created.
SQL> INSERT INTO mytable VALUES ('D');
1 row created.
SQL> CREATE OR REPLACE PROCEDURE getstuff(p_list IN t_strarray,
2 io_cursor OUT SYS_REFCURSOR) IS
3 BEGIN
4 OPEN io_cursor FOR
5 SELECT *
6 FROM mytable
7 WHERE mytable.field1 IN (SELECT COLUMN_VALUE FROM TABLE(p_list));
8 END;
9 /
Procedure created.
SQL> VARIABLE cc REFCURSOR;
SQL> EXEC getstuff (t_strarray('A', 'B', 'C'), :cc);
PL/SQL procedure successfully completed.
SQL> print cc
FIELD1
------------------------------
A
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)