¿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.