Apakah Anda benar-benar perlu mengembalikan daftar yang dipisahkan koma? Biasanya akan jauh lebih baik untuk mendeklarasikan tipe koleksi
CREATE TYPE num_table
AS TABLE OF NUMBER;
Deklarasikan fungsi yang mengembalikan instance dari koleksi ini
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;
lalu gunakan koleksi itu dalam kueri Anda
SELECT *
FROM users_table
WHERE user_id IN (SELECT * FROM TABLE( l_nums ));
Dimungkinkan untuk menggunakan SQL dinamis juga (yang ditunjukkan oleh @Sebas). Kelemahannya, bagaimanapun, adalah bahwa setiap panggilan ke prosedur akan menghasilkan pernyataan SQL baru yang perlu diuraikan lagi sebelum dieksekusi. Ini juga memberi tekanan pada cache perpustakaan yang dapat menyebabkan Oracle menghapus banyak pernyataan SQL lain yang dapat digunakan kembali yang dapat menciptakan banyak masalah kinerja lainnya.