gpt4 book ai didi

oracle - 将字符串数组传递给过程并在带有 IN 的 WHERE 子句中使用它

转载 作者:行者123 更新时间:2023-12-01 09:35:30 24 4
gpt4 key购买 nike

我想将一个字符串列表传递给一个过程并在 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

关于oracle - 将字符串数组传递给过程并在带有 IN 的 WHERE 子句中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com