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

Jak obsłużyć parametry opcjonalne w zapytaniu SQL?

Tak, korzystając z jednego z poniższych:

WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);

...nie są sargable. Będą działać, ale wykonają najgorszą z dostępnych opcji.

Jeśli masz tylko jeden parametr, lepszą alternatywą są JEŻELI/ELSE i oddzielne, dostosowane instrukcje.

Następną opcją jest dynamiczny SQL. Ale kodowanie dynamicznego SQL jest bezużyteczne, jeśli przenosisz predykaty niepodlegające sargacji w pierwszym przykładzie. Dynamiczny SQL pozwala dostosować zapytanie z uwzględnieniem wielu ścieżek. Ale grozi to również wstrzyknięciem SQL, więc powinno być wykonywane za sparametryzowanymi zapytaniami (najlepiej w ramach procedur/funkcji składowanych w pakietach).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między LockModeType Jpa

  2. Proces aktualizacji krok po kroku dla aktualizacji R12.2 część -1

  3. GROUP BY / zamieszanie funkcji agregujących w SQL

  4. Czy jest jakaś różnica między !=i <> w Oracle Sql?

  5. Używanie Substr z Instr do wyodrębniania ciągu w Oracle