El orden en que Oracle evalúa las condiciones que se encuentran en la cláusula where no es fijo. Es decir, puede optar por evaluar la condición que contiene TO_DATE antes que los demás criterios, en cuyo caso la consulta fallará. Para evitar eso, agregue la sugerencia ordered_predicates a su consulta, pero tenga en cuenta que esto puede requerir un ajuste manual adicional para mejorar el rendimiento.
SELECT /*+ ordered_predicates */
To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') somedate
FROM properties$aud a,
template_properties$aud b,
consumable_properties$aud c
WHERE Lower(a.name) = 'somedate'
AND a.id = b.property_id
AND b.id = c.template_property_id
AND To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') IS NOT NULL
Aparentemente ordered_predicates
está en desuso a partir de 10 g. En ese caso, creo que su única opción es usar una subconsulta de tal manera que el optimizador se vea obligado a evaluarla primero (es decir, no puede combinar las consultas). La forma más fácil de hacer esto es poner rownum
en la instrucción where de la consulta interna.
SELECT To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') somedate
FROM (SELECT value
FROM properties$aud a,
template_properties$aud b,
consumable_properties$aud c
WHERE Lower(a.name) = 'somedate'
AND a.id = b.property_id
AND b.id = c.template_property_id
AND rownum > 0)
WHERE To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') IS NOT NULL