Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So geben Sie Bindungen für einen mehrwertigen Parameter in SQL Developer ein

Dies ist keine SQL Developer-Einschränkung, sondern nur die Funktionsweise von Bind-Variablen. Sie tun effektiv:

select count(*) from foo 
where foo.id in ('1,2,3')

... was wirklich in (to_number('1,2,3')) ist , daher der Fehler. Es funktioniert für einen einzelnen Wert, liefert ungerade Ergebnisse für zwei Werte, wenn Ihr Dezimaltrennzeichen ein Komma ist, und schlägt für alles andere fehl.

Sie können an einem Bind-Prompt nicht mehrere Werte eingeben oder mehrere Werte an in() übergeben mit einer einzigen Bindung. Sie können betrügen sei aber etwas erfinderisch. Die xmltable -Funktion konvertiert die durch Kommas getrennte Zeichenfolge in Zeilen mit jeweils einem Wert:

var ids varchar2(50);
exec :ids := '1,2,3';
select * from xmltable(:ids);

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

Sie können das dann als Nachschlagetabelle verwenden:

select count(*)
from xmltable(:ids) x
join foo f on f.id = to_number(x.column_value);

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