将字符串数组传递给过程,并在带有IN的WHERE子句中使用它 [英] Passing an array of strings to a procedure and using it in the WHERE clause with IN

查看:169
本文介绍了将字符串数组传递给过程,并在带有IN的WHERE子句中使用它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将字符串列表传递给过程,并在select语句的WHERE子句中使用它,但是我不知道该怎么做.

I want to pass a list of strings to a procedure and use it in the WHERE clause of a select statement, but I can't figure out how to do this.

我声明了以下嵌套表:

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类型:

Your array needs to be a SQL object type, created directly in SQL, not a PLSQL type declared in a package:

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

这篇关于将字符串数组传递给过程,并在带有IN的WHERE子句中使用它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆