Ce n'est pas une restriction du développeur SQL, c'est simplement le fonctionnement des variables de liaison. Vous faites effectivement :
select count(*) from foo
where foo.id in ('1,2,3')
... qui est vraiment in (to_number('1,2,3'))
, d'où l'erreur. Cela fonctionnera pour une seule valeur, donnera des résultats impairs pour deux valeurs si votre séparateur décimal est une virgule et échouera pour toute autre valeur.
Vous ne pouvez pas entrer plusieurs valeurs à une invite de liaison ou fournir plusieurs valeurs à un in()
avec une seule liaison. Vous pouvez tricher soyez un peu inventif quand même. Le xmltable
convertira la chaîne séparée par des virgules en lignes avec une valeur dans chacune :
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);
COLUMN_VALUE
------------
1
2
3
Vous pouvez ensuite l'utiliser comme table de correspondance :
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);
COUNT(*)
----------
3