sql >> Database >  >> RDS >> Oracle

Bindingen invoeren voor een parameter met meerdere waarden in SQL Developer

Dit is geen beperking voor SQL-ontwikkelaars, het is gewoon hoe bindvariabelen werken. Je doet effectief:

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

... wat echt in (to_number('1,2,3')) . is , vandaar de fout. Het werkt voor een enkele waarde, geeft oneven resultaten voor twee waarden als uw decimaalteken een komma is, en faalt voor iets meer.

U kunt niet meerdere waarden invoeren bij een bindprompt, of meerdere waarden opgeven voor een in() met een enkele binding. Je kunt bedriegen wel een beetje inventief zijn. De xmltable functie converteert de door komma's gescheiden tekenreeks naar rijen met één waarde in elk:

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

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

U kunt die dan als opzoektabel gebruiken:

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

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



  1. Linker join met een duidelijke vraag in Laravel

  2. php json-arrays samenvoegen

  3. Hoe te bepalen of het getal float of integer is

  4. Mysql-query controleert het type blob-kolom in where-clausule