Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como inserir associações para um parâmetro de vários valores no SQL Developer


Esta não é uma restrição do SQL Developer, é apenas como as variáveis ​​de ligação funcionam. Você está efetivamente fazendo:
select count(*) from foo 
where foo.id in ('1,2,3')

... que está realmente in (to_number('1,2,3')) , daí o erro. Ele funcionará para um único valor, fornecerá resultados ímpares para dois valores se o separador decimal for uma vírgula e falhará para qualquer outra coisa.

Você não pode inserir vários valores em um prompt de ligação ou fornecer vários valores para um in() com uma única ligação. Você pode trapacear ser um pouco inventivo embora. A xmltable A função irá converter a string separada por vírgulas em linhas com um valor em cada:
var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);

COLUMN_VALUE
------------
1            
2            
3            

Você pode usar isso como uma tabela de consulta:
select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);

  COUNT(*)
----------
         3