ऑर्डर जो Oracle उस स्थिति का मूल्यांकन करता है जहां क्लॉज निश्चित नहीं है। कहने का तात्पर्य यह है कि यह अन्य मानदंडों से पहले 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
. लगाना जहां आंतरिक क्वेरी के बयान में।
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