sql >> Databáze >  >> RDS >> Oracle

Jak zadat vazby pro vícehodnotový parametr v SQL Developer

Toto není omezení pro vývojáře SQL, jde jen o to, jak fungují proměnné vazby. Efektivně děláte:

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

... což je skutečně in (to_number('1,2,3')) , proto ta chyba. Bude fungovat pro jednu hodnotu, poskytne liché výsledky pro dvě hodnoty, pokud je vaším oddělovačem desetin čárka, a selže u čehokoli dalšího.

Nemůžete zadat více hodnot na výzvu k vytvoření vazby nebo zadat více hodnot do in() s jedinou vazbou. Můžete podvádět být trochu vynalézavý. xmltable funkce převede řetězec oddělený čárkami na řádky s jednou hodnotou v každém:

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

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

Tu pak můžete použít jako vyhledávací tabulku:

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

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



  1. MySQL – funkce ELT() a FILED() pro extrahování pozice indexu ze seznamu

  2. Kterou vidlici/verzi MySQL vybrat?

  3. Jak zpracovat volání procedury Oracle Store s typy Oracle jako vstup nebo výstup pomocí EclipseLink

  4. Vysvětlete připojení MySQL jednoduchým jazykem