Müssen Sie wirklich eine durch Kommas getrennte Liste zurückgeben? Es wäre im Allgemeinen viel besser, einen Sammlungstyp zu deklarieren
CREATE TYPE num_table
AS TABLE OF NUMBER;
Deklarieren Sie eine Funktion, die eine Instanz dieser Sammlung zurückgibt
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;
und dann diese Sammlung in Ihrer Abfrage verwenden
SELECT *
FROM users_table
WHERE user_id IN (SELECT * FROM TABLE( l_nums ));
Es ist auch möglich, dynamisches SQL zu verwenden (was @Sebas demonstriert). Der Nachteil dabei ist jedoch, dass jeder Aufruf der Prozedur eine neue SQL-Anweisung generiert, die erneut analysiert werden muss, bevor sie ausgeführt wird. Es übt auch Druck auf den Bibliotheks-Cache aus, was dazu führen kann, dass Oracle viele andere wiederverwendbare SQL-Anweisungen löscht, was viele andere Leistungsprobleme verursachen kann.