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

Wyrocznia. Zapobieganie scalaniu podzapytania i warunków zapytania głównego

ROWNUM jest najbezpieczniejszym sposobem zapobiegania przekształceniom optymalizatora i zapewnienia bezpieczeństwa typów. Korzystanie z ROWNUM sprawia, że ​​Oracle uważa, że ​​kolejność wierszy ma znaczenie i zapobiega takim rzeczom, jak wypychanie predykatów i łączenie widoków.

select *
from
(
   select id, value, rownum --Add ROWNUM for type safety.
   from eav
   where attr like 'sal%' 
)
where to_number(value) > 5000;

Można to zrobić na inne sposoby, ale żaden z nich nie jest niezawodny. Nie przejmuj się prostymi widokami wbudowanymi, typowymi wyrażeniami tabelowymi, CASE , kolejność predykatów lub podpowiedzi. Te popularne metody nie są niezawodne i widziałem, jak wszystkie zawiodły.

Najlepszym rozwiązaniem długoterminowym jest zmiana tabeli EAV tak, aby miała inną kolumnę dla każdego typu, jak opisuję w ta odpowiedź . Napraw to teraz, bo przyszli programiści będą przeklinać Twoje imię, gdy będą musieli pisać złożone zapytania, aby uniknąć błędów typowania.



  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 Insert Select z zamówieniem według

  2. Czy jest różnica między kluczem zastępczym, kluczem syntetycznym i kluczem sztucznym?

  3. jak uzyskać rowNum jak kolumnę w sqlite IPHONE

  4. Jak zachować unikalny identyfikator wśród wielu tabel bazy danych?

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