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

Sådan indtaster du binds for en parameter med flere værdier i SQL Developer

Dette er ikke en SQL-udviklerrestriktion, det er bare hvordan bindevariabler fungerer. Du gør effektivt:

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

... som virkelig er in (to_number('1,2,3')) , deraf fejlen. Det fungerer for en enkelt værdi, giver ulige resultater for to værdier, hvis dit decimaltegn er et komma, og fejler noget mere.

Du kan ikke indtaste flere værdier ved en bindeprompt eller levere flere værdier til en in() med et enkelt bind. Du kan snyde vær dog lidt opfindsom. xmltable funktion vil konvertere den kommaseparerede streng til rækker med én værdi i hver:

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

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

Du kan derefter bruge det som en opslagstabel:

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

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



  1. Brug variabel med TOP i select-sætning i SQL Server uden at gøre den dynamisk

  2. MySQL - Rækker til kolonner

  3. Max borde og designmønster

  4. Hvordan sp_describe_first_result_set virker i SQL Server