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

Invio di una matrice di valori alla procedura Oracle da utilizzare nella clausola WHERE IN

Un modo potrebbe essere quello di utilizzare un VARRAY per il PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN parametro e utilizzalo come descritto qui
Non sono sicuro, però, di come chiamarlo da c#.

Un altro modo è usare varchar2 con un csv come hai affermato nella tua domanda ma senza sql dinamico, in questo modo:

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;