Oracle
 sql >> Database >  >> RDS >> Oracle

Come inserire le associazioni per un parametro multivalore in SQL Developer

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