Detta är inte en SQL Developer-begränsning, det är bara hur bindningsvariabler fungerar. Du gör faktiskt:
select count(*) from foo
where foo.id in ('1,2,3')
... som egentligen är in (to_number('1,2,3'))
, därav felet. Det fungerar för ett enda värde, ger udda resultat för två värden om din decimalavgränsare är ett kommatecken och misslyckas med något mer.
Du kan inte ange flera värden vid en bindningsprompt eller ange flera värden till en in()
med en enda bindning. Du kan fuska vara lite uppfinningsrik dock. xmltable
funktion kommer att konvertera den kommaseparerade strängen till rader med ett värde i varje:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Du kan sedan använda det som en uppslagstabell:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3