Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oráculo. Evitando a subconsulta de mesclagem e as condições da consulta principal


ROWNUM é a maneira mais segura de evitar transformações do otimizador e garantir a segurança do tipo. Usando ROWNUM faz o Oracle pensar que a ordem das linhas é importante e evita coisas como o envio de predicados e a mesclagem de visualizações.
select *
from
(
   select id, value, rownum --Add ROWNUM for type safety.
   from eav
   where attr like 'sal%' 
)
where to_number(value) > 5000;

Existem outras maneiras de fazer isso, mas nenhuma delas é confiável. Não se preocupe com visualizações inline simples, expressões de tabela comuns, CASE , ordenação de predicados ou dicas. Esses métodos comuns não são confiáveis ​​e já vi todos eles falharem.

A melhor solução a longo prazo é alterar a tabela EAV para ter uma coluna diferente para cada tipo, conforme descrevo em esta resposta . Corrija isso agora ou futuros desenvolvedores amaldiçoarão seu nome quando tiverem que escrever consultas complexas para evitar erros de tipo.