Наистина ли трябва да върнете списък, разделен със запетая? По принцип би било много по-добре да се декларира тип колекция
CREATE TYPE num_table
AS TABLE OF NUMBER;
Декларирайте функция, която връща екземпляр от тази колекция
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;
и след това използвайте тази колекция във вашата заявка
SELECT *
FROM users_table
WHERE user_id IN (SELECT * FROM TABLE( l_nums ));
Възможно е да се използва и динамичен SQL (което @Sebas демонстрира). Недостатъкът на това обаче е, че всяко извикване на процедурата ще генерира нов SQL израз, който трябва да бъде анализиран отново, преди да бъде изпълнен. Освен това оказва натиск върху кеша на библиотеката, което може да накара Oracle да изчисти много други SQL изрази за многократна употреба, което може да създаде много други проблеми с производителността.