user2190186
user2190186

Reputation: 23

How to pass values to IN operator dynamically?

I want to create a procedure which accepts an array list for IN operator.

For eg:

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

If the procedure is called using two parameters then the query should be

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

If the procedure is called using one parameter then the query should be

Select * from table1 where col1 IN (val1)

Upvotes: 1

Views: 1779

Answers (1)

MT0
MT0

Reputation: 167982

Create a collection type:

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

Then you can pass it to a procedure and use the MEMBER OF operator (rather than the IN operator):

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;
/

If you are connecting from an external language then you can quite easily pass an array to the procedure (Java example) or you can create the list in PL/SQL or from a delimited list.

Upvotes: 4

Related Questions