sql >> Databasteknik >  >> RDS >> Oracle

Hur man anger binds för en parameter med flera värden i SQL Developer

Detta är inte en SQL Developer-begränsning, det är bara hur bindningsvariabler fungerar. Du gör faktiskt:

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

... som egentligen är in (to_number('1,2,3')) , därav felet. Det fungerar för ett enda värde, ger udda resultat för två värden om din decimalavgränsare är ett kommatecken och misslyckas med något mer.

Du kan inte ange flera värden vid en bindningsprompt eller ange flera värden till en in() med en enda bindning. Du kan fuska vara lite uppfinningsrik dock. xmltable funktion kommer att konvertera den kommaseparerade strängen till rader med ett värde i varje:

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

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

Du kan sedan använda det som en uppslagstabell:

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

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



  1. Kan inte ansluta till heroku postgresql-databas från lokal nodapp med uppföljare

  2. Fastnat i fel 2 med mysql med XAMPP

  3. Automatiserad testning av uppgraderingsprocessen för PostgreSQL

  4. hur ställer man in variabelt värde i mysql CREATE TABLE-frågan? Java