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.