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

usando valores separados por comas dentro de la cláusula IN para la columna NÚMERO

¿Realmente necesita devolver una lista separada por comas? En general, sería mucho mejor declarar un tipo de colección

CREATE TYPE num_table
    AS TABLE OF NUMBER;

Declare una función que devuelva una instancia de esta colección

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;

y luego use esa colección en su consulta

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

También es posible usar SQL dinámico (que @Sebas demuestra). Sin embargo, la desventaja de esto es que cada llamada al procedimiento generará una nueva instrucción SQL que debe analizarse nuevamente antes de ejecutarse. También ejerce presión sobre la memoria caché de la biblioteca, lo que puede hacer que Oracle elimine muchas otras sentencias SQL reutilizables, lo que puede crear muchos otros problemas de rendimiento.