sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo pasar valores al operador IN dinámicamente?

Crear un tipo de colección:

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

Luego puede pasarlo a un procedimiento y usar el MEMBER OF operador (en lugar del 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;
/

Si se está conectando desde un lenguaje externo, puede pasar fácilmente una matriz al procedimiento (ejemplo de Java) o puede crear la lista en PL/SQL o desde una lista delimitada.