如何动态地将值传递给IN运算符?

时间:2017-04-03 07:06:48

标签: oracle stored-procedures plsql

我想创建一个接受IN运算符的数组列表的过程。

例如:

Create or Replace Procedure Test (a Arraylist)
{
Select * from table1 where col1 IN (Arraylist)
}

如果使用两个参数调用该过程,则查询应为

Select * from table1 where col1 IN (val1,val2)

如果使用一个参数调用该过程,则查询应为

Select * from table1 where col1 IN (val1)

1 个答案:

答案 0 :(得分:4)

创建集合类型:

CREATE TYPE stringlist IS TABLE OF VARCHAR2(100);
/

然后您可以将其传递给某个程序并使用MEMBER OF运算符(而不是IN运算符):

CREATE PROCEDURE Test (
  in_list     IN  stringlist,
  out_results OUT SYS_REFCURSOR
)
IS
BEGIN
  OPEN out_results FOR
  SELECT *
  FROM   your_table
  WHERE  your_column MEMBER OF in_list;
END;
/

如果您使用外部语言进行连接,则可以非常轻松地将数组传递给过程(Java example),或者您可以在PL / SQL或delimited list中创建列表。