Ini bukan batasan Pengembang SQL, ini hanya cara kerja variabel ikat. Anda secara efektif melakukan:
select count(*) from foo
where foo.id in ('1,2,3')
... yang sebenarnya in (to_number('1,2,3'))
, maka kesalahan. Ini akan berfungsi untuk satu nilai, memberikan hasil ganjil untuk dua nilai jika pemisah desimal Anda adalah koma, dan gagal untuk yang lainnya.
Anda tidak dapat memasukkan beberapa nilai pada prompt pengikatan, atau memberikan beberapa nilai ke in()
dengan satu ikatan. Anda dapat menipu menjadi sedikit inventif sekalipun. xmltable
fungsi akan mengubah string yang dipisahkan koma menjadi baris dengan satu nilai di setiap baris:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Anda kemudian dapat menggunakannya sebagai tabel pencarian:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3