Oracle
 sql >> база данни >  >> RDS >> Oracle

Оракул. Предотвратяване на условия на подзаявка за сливане и основна заявка

ROWNUM е най-безопасният начин за предотвратяване на трансформациите на оптимизатора и осигуряване на безопасност на типа. Използване на ROWNUM кара Oracle да мисли, че редът на редовете има значение и предотвратява неща като натискане на предикат и обединяване на изгледи.

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

Има и други начини да направите това, но никой от тях не е надежден. Не се занимавайте с прости вградени изгледи, общи изрази на таблици, CASE , подреждане на предикати или подсказки. Тези често срещани методи не са надеждни и съм ги виждал неуспешни.

Най-доброто дългосрочно решение е да промените EAV таблицата, за да има различна колона за всеки тип, както описвам в този отговор . Поправете това сега или бъдещите разработчици ще проклинат името ви, когато трябва да пишат сложни заявки, за да избегнат грешки при въвеждане.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ODP.NET Managed – Не може да се намери исканият доставчик на данни за .Net Framework

  2. Създаване на CSV файл на Loop | PLSQL Oracle SQL разработчик

  3. Какъв е еквивалентът на varchar(max) в Oracle?

  4. Как да използвате Oracle DMP файлове?

  5. Обединяване на данни от 5 таблици без дублиращи се стойности и получаване на резултат с персонализиран статус в Oracle 10g