Това не е ограничение на SQL Developer, а просто как работят свързващите променливи. Вие ефективно правите:
select count(*) from foo
where foo.id in ('1,2,3')
... което наистина е in (to_number('1,2,3'))
, оттук и грешката. Ще работи за една стойност, ще даде странни резултати за две стойности, ако вашият десетичен разделител е запетая, и ще се провали за нещо повече.
Не можете да въведете множество стойности в подкана за свързване или да предоставите множество стойности на in()
с едно обвързване. Можете да изневерявате все пак бъдете малко изобретателни. xmltable
ще преобразува разделения със запетаи низ в редове с по една стойност във всеки:
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