Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como passar valores para o operador IN dinamicamente?


Crie um tipo de coleção:
CREATE TYPE stringlist IS TABLE OF VARCHAR2(100);
/

Então você pode passá-lo para um procedimento e usar o MEMBER OF operador (em vez do IN operador):
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;
/

Se você estiver se conectando de uma linguagem externa, poderá facilmente passar um array para o procedimento (exemplo Java) ou criar a lista em PL/SQL ou a partir de uma lista delimitada.