Toto není omezení pro vývojáře SQL, jde jen o to, jak fungují proměnné vazby. Efektivně děláte:
select count(*) from foo
where foo.id in ('1,2,3')
... což je skutečně in (to_number('1,2,3'))
, proto ta chyba. Bude fungovat pro jednu hodnotu, poskytne liché výsledky pro dvě hodnoty, pokud je vaším oddělovačem desetin čárka, a selže u čehokoli dalšího.
Nemůžete zadat více hodnot na výzvu k vytvoření vazby nebo zadat více hodnot do in()
s jedinou vazbou. Můžete podvádět být trochu vynalézavý. xmltable
funkce převede řetězec oddělený čárkami na řádky s jednou hodnotou v každém:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Tu pak můžete použít jako vyhledávací tabulku:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3