これはSQLDeveloperの制限ではなく、バインド変数がどのように機能するかを示しています。あなたは効果的にやっています:
select count(*) from foo
where foo.id in ('1,2,3')
...これは実際にはin (to_number('1,2,3'))
、したがってエラー。単一の値で機能し、小数点がコンマの場合は2つの値で奇数の結果が得られ、それ以上の場合は失敗します。
バインドプロンプトで複数の値を入力したり、in()
に複数の値を指定したりすることはできません。 シングルバインドで。あなたは<ストライク>チートストライク>することができます ただし、少し独創的です。 xmltable
関数は、コンマ区切りの文字列を、それぞれに1つの値を持つ行に変換します。
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
その後、それをルックアップテーブルとして使用できます:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3