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

Envío de una matriz de valores al procedimiento de Oracle para usar en la cláusula WHERE IN

Una forma podría ser usar un VARRAY para el PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN y utilícelo como se describe aquí
Sin embargo, no estoy seguro de cómo llamarlo desde C#.

Otra forma es usar varchar2 con un csv como indicó en su pregunta pero sin sql dinámico, así:

CREATE PROCEDURE MY_TEST_PROC(
  CUR OUT SYS_REFCURSOR,
  PARAM_THAT_WILL_BE varchar2)
AS
BEGIN
  OPEN CUR FOR 
    SELECT * 
      FROM MY_TABLE 
     WHERE COL1 IN (
        select regexp_substr(PARAM_THAT_WILL_BE, '[^,]+',1,level) p
          from dual t
       connect by level <= regexp_count(PARAM_THAT_WILL_BE, ',') + 1
)
END;