Questa non è una restrizione per gli sviluppatori SQL, è solo il modo in cui funzionano le variabili di associazione. Stai effettivamente facendo:
select count(*) from foo
where foo.id in ('1,2,3')
... che in realtà è in (to_number('1,2,3'))
, da qui l'errore. Funzionerà per un singolo valore, darà risultati dispari per due valori se il separatore decimale è una virgola e fallirà per qualsiasi altra cosa.
Non puoi inserire più valori a un prompt di binding o fornire più valori a un in()
con un solo legame. Puoi imbrogliare essere un po' fantasioso però. La xmltable
La funzione converte la stringa separata da virgole in righe con un valore in ciascuna:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Puoi quindi usarlo come tabella di ricerca:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3