Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment entrer des liaisons pour un paramètre à plusieurs valeurs dans SQL Developer

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