Oracleがwhere句で見つかった条件を評価する順序は固定されていません。つまり、TO_DATEを含む条件を他の基準の前に評価することを選択できます。その場合、クエリは失敗します。これを防ぐには、ordered_predicatesヒントをクエリに追加しますが、パフォーマンスを向上させるために追加の手動調整が必要になる場合があることに注意してください。
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
どうやらordered_predicates
10g以降は非推奨です。その場合、あなたの唯一の選択肢は、オプティマイザーが最初にサブクエリを評価するように強制されるような方法でサブクエリを使用することだと思います(つまり、クエリを組み合わせることができません)。これを行う最も簡単な方法は、rownum
を配置することです。 内部クエリのwhereステートメント内。
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