Oracle
 sql >> Database >  >> RDS >> Oracle

Come passare i valori all'operatore IN in modo dinamico?

Crea un tipo di raccolta:

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

Quindi puoi passarlo a una procedura e utilizzare il MEMBER OF operatore (anziché IN operatore):

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 ti stai connettendo da un linguaggio esterno puoi passare abbastanza facilmente un array alla procedura (esempio Java) oppure puoi creare l'elenco in PL/SQL o da un elenco delimitato.