Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wprowadzić powiązania dla parametru wielowartościowego w SQL Developer

To nie jest ograniczenie dla programistów SQL, po prostu tak działają zmienne wiązania. Skutecznie robisz:

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

... co tak naprawdę jest in (to_number('1,2,3')) , stąd błąd. Zadziała dla pojedynczej wartości, da nieparzyste wyniki dla dwóch wartości, jeśli separatorem dziesiętnym jest przecinek, i zawiedzie w przypadku niczego więcej.

Nie możesz wprowadzić wielu wartości w monicie powiązania ani podać wielu wartości do in() z pojedynczym wiązaniem. Możesz oszukiwać być jednak nieco pomysłowym. xmltable funkcja przekonwertuje ciąg znaków oddzielonych przecinkami na wiersze z jedną wartością w każdym:

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

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

Następnie możesz użyć tego jako tabeli przeglądowej:

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle konfiguruje środowisko wsparcia globalizacji

  2. Kursor referencyjny gubi się w XMLType.createxml

  3. Błąd :ORA-00907:brak prawego nawiasu

  4. Binarny tryb PL/SQL FTP API a tryb ascii

  5. ASP.NET MVC5 — utrzymywanie użytkowników w bazie danych Oracle