ROWNUM
es la forma más segura de evitar las transformaciones del optimizador y garantizar la seguridad de los tipos. Usando ROWNUM
hace que Oracle piense que el orden de las filas es importante y evita cosas como la inserción de predicados y la fusión de vistas.
select *
from
(
select id, value, rownum --Add ROWNUM for type safety.
from eav
where attr like 'sal%'
)
where to_number(value) > 5000;
Hay otras formas de hacer esto, pero ninguna de ellas es confiable. No se moleste con vistas en línea simples, expresiones de tabla comunes, CASE
, orden de predicados o sugerencias. Esos métodos comunes no son confiables y los he visto fallar a todos.
La mejor solución a largo plazo es modificar la tabla EAV para tener una columna diferente para cada tipo, como describo en esta respuesta . Solucione esto ahora o los futuros desarrolladores maldecirán su nombre cuando tengan que escribir consultas complejas para evitar errores tipográficos.