To nie jest ograniczenie dla programistów SQL, po prostu tak działają zmienne wiązania. Skutecznie robisz:
select count(*) from foo
where foo.id in ('1,2,3')
... co tak naprawdę jest in (to_number('1,2,3'))
, stąd błąd. Zadziała dla pojedynczej wartości, da nieparzyste wyniki dla dwóch wartości, jeśli separatorem dziesiętnym jest przecinek, i zawiedzie w przypadku niczego więcej.
Nie możesz wprowadzić wielu wartości w monicie powiązania ani podać wielu wartości do in()
z pojedynczym wiązaniem. Możesz oszukiwać być jednak nieco pomysłowym. xmltable
funkcja przekonwertuje ciąg znaków oddzielonych przecinkami na wiersze z jedną wartością w każdym:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Następnie możesz użyć tego jako tabeli przeglądowej:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3