Esta não é uma restrição do SQL Developer, é apenas como as variáveis de ligação funcionam. Você está efetivamente fazendo:
select count(*) from foo
where foo.id in ('1,2,3')
... que está realmente
in (to_number('1,2,3'))
, daí o erro. Ele funcionará para um único valor, fornecerá resultados ímpares para dois valores se o separador decimal for uma vírgula e falhará para qualquer outra coisa. Você não pode inserir vários valores em um prompt de ligação ou fornecer vários valores para um
in()
com uma única ligação. Você pode xmltable
A função irá converter a string separada por vírgulas em linhas com um valor em cada:var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Você pode usar isso como uma tabela de consulta:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3