本当にコンマ区切りのリストを返す必要がありますか?一般に、コレクションタイプを宣言する方がはるかに優れています
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ステートメントを削除し、他の多くのパフォーマンスの問題を引き起こす可能性があります。