Moet je echt een door komma's gescheiden lijst retourneren? Het zou over het algemeen veel beter zijn om een verzamelingstype aan te geven
CREATE TYPE num_table
AS TABLE OF NUMBER;
Declareer een functie die een instantie van deze verzameling retourneert
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;
en gebruik die verzameling vervolgens in uw zoekopdracht
SELECT *
FROM users_table
WHERE user_id IN (SELECT * FROM TABLE( l_nums ));
Het is ook mogelijk om dynamische SQL te gebruiken (wat @Sebas laat zien). Het nadeel hiervan is echter dat elke aanroep van de procedure een nieuwe SQL-instructie genereert die opnieuw moet worden geparseerd voordat deze wordt uitgevoerd. Het zet ook de bibliotheekcache onder druk, waardoor Oracle tal van andere herbruikbare SQL-instructies kan wissen, wat kan leiden tot tal van andere prestatieproblemen.