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

utilizzando valori separati da virgola all'interno della clausola IN per la colonna NUMBER

Hai davvero bisogno di restituire un elenco separato da virgole? In genere sarebbe molto meglio dichiarare un tipo di raccolta

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Dichiara una funzione che restituisce un'istanza di questa raccolta

CREATE OR REPLACE FUNCTION get_nums
  RETURN num_table
IS
  l_nums num_table := num_table();
BEGIN
  for i in 1 .. 10
  loop
    l_nums.extend;
    l_nums(i) := i*2;
  end loop;
END;

e poi usa quella raccolta nella tua query

SELECT *
  FROM users_table
 WHERE user_id IN (SELECT * FROM TABLE( l_nums ));

È anche possibile utilizzare SQL dinamico (che @Sebas dimostra). Lo svantaggio di ciò, tuttavia, è che ogni chiamata alla procedura genererà una nuova istruzione SQL che deve essere analizzata nuovamente prima di essere eseguita. Inoltre mette sotto pressione la cache della libreria che può indurre Oracle a eliminare molte altre istruzioni SQL riutilizzabili che possono creare molti altri problemi di prestazioni.