sql >> Databáze >  >> RDS >> Oracle

Odeslání pole hodnot do procedury Oracle k použití v klauzuli WHERE IN

Jedním ze způsobů by mohlo být použití VARRAY pro PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN parametr a použijte jej, jak je popsáno zde
Nejsem si však jistý, jak jej volat z c#.

Dalším způsobem je použít varchar2 s csv, jak jste uvedli ve své otázce, ale bez dynamického sql, jako je tento:

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;


  1. SQLite NOT NULL omezení

  2. JOIN dotazy vs. více dotazů

  3. Mohu použít návratovou hodnotu INSERT...RETURNING v jiném INSERTu?

  4. Lumen - Vytvořte připojení k databázi za běhu