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

标签 oracle plsql

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

相关文章:

oracle - oracle 中令人困惑的 group by 语法,这是如何以及为什么起作用的?

sql - 如何从 PL/SQL 函数或过程内部访问 Oracle 系统表?

oracle - 从查询设置表单字段的值

sql - 如何在 JPA/Hibernate 中执行 native SQL 脚本?

mysql - 进行查询时使用等于还是不等于更好?

oracle - 从 Oracle 表变量/数组中选择值?

jdbc - 从通过 JDBC 调用的 PL?SQL 函数返回表类型?

oracle - PostgreSQL 与 Oracle : "compile-time" checking of PL/pgSQL

oracle - Oracle运算符<>在varchar2中不起作用

java - xmlparserv2.jar 和 Oracle 数据库错误