Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

usando valores separados por vírgula dentro da cláusula IN para a coluna NUMBER


Você realmente precisa retornar uma lista separada por vírgulas? Geralmente seria muito melhor declarar um tipo de coleção
CREATE TYPE num_table
    AS TABLE OF NUMBER;

Declare uma função que retorna uma instância desta coleção
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, em seguida, use essa coleção em sua consulta
SELECT *
  FROM users_table
 WHERE user_id IN (SELECT * FROM TABLE( l_nums ));

Também é possível usar SQL dinâmico (o que o @Sebas demonstra). A desvantagem disso, no entanto, é que cada chamada para o procedimento gerará uma nova instrução SQL que precisa ser analisada novamente antes de ser executada. Ele também pressiona o cache da biblioteca, o que pode fazer com que o Oracle limpe muitas outras instruções SQL reutilizáveis ​​que podem criar muitos outros problemas de desempenho.