A ordem em que o Oracle avalia as condições encontradas na cláusula where não é fixa. Ou seja, ele pode optar por avaliar a condição que contém TO_DATE antes dos outros critérios, caso em que a consulta falhará. Para evitar isso, adicione a dica de predicados_ordenados à sua consulta, mas esteja ciente de que isso pode exigir ajuste manual adicional para melhorar o desempenho.
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á obsoleto a partir de 10g. Nesse caso, acho que sua única opção é usar uma subconsulta de forma que o otimizador seja forçado a avaliá-la primeiro (ou seja, não pode combinar as consultas). A maneira mais fácil de fazer isso é colocar rownum
na instrução where da 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