Передача массива строк в процедуру и использование его в предложении WHERE с IN - PullRequest
3 голосов
/ 13 января 2012

Я хочу передать список строк процедуре и использовать его в предложении WHERE оператора select, но я не могу понять, как это сделать.

Я объявил следующую вложенную таблицу:

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;

Как это можно сделать?

1 Ответ

8 голосов
/ 13 января 2012

Ваш массив должен иметь тип объекта 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...