PL/SQL के लिए Oracle आश्वासन देता है कि वह शॉर्ट-सर्किट मूल्यांकन का उपयोग करेगा:
प्रेषक:2 PL/SQL भाषा के बुनियादी सिद्धांत
जब आप nextval
का उपयोग करते हैं SQL कोड में, हमारे पास एक अलग स्थिति है।
सबसे पहले हमें यह ध्यान रखना होगा कि currval
और nextval
छद्म स्तंभ हैं:
प्रेषक:3 स्यूडोकॉलम .
अब सवाल यह है:Oracle nextval
का मूल्यांकन क्यों करता है? ? या क्या यह व्यवहार कहीं कहा गया है?
प्रेषक:सीक्वेंस स्यूडोकॉलम
आपका मामला स्पष्ट रूप से "1. एक शीर्ष-स्तरीय चयन कथन" है, लेकिन इसका मतलब यह नहीं है कि शॉर्ट-सर्किट तर्क जगह में नहीं है, बल्कि केवल nextval
है हमेशा मूल्यांकन किया जाता है।
यदि आप शॉर्ट-सर्किट लॉजिक में रुचि रखते हैं, तो nextval
को हटाना बेहतर होगा। समीकरण से।
इस तरह की एक क्वेरी सबक्वेरी का मूल्यांकन नहीं करती है:
select 6 c
from dual
where 'a' = 'a' or 'a' = (select dummy from dual)
लेकिन अगर coalesce
. के साथ कुछ ऐसा ही करने की कोशिश करें या case
हम देखेंगे कि Oracle अनुकूलक उपश्रेणियों को निष्पादित करने का निर्णय लेता है:
select 6 c
from dual
where 'a' = coalesce('a', (select dummy from dual) )
मैंने SQLFiddle के इस डेमो में एनोटेट किए गए परीक्षण बनाए हैं यह दिखाने के लिए।
ऐसा लगता है कि Oracle शॉर्ट-सर्किट लॉजिक को तभी लागू करता है, जब OR कंडीशन के साथ, लेकिन coalesce
के साथ और case
इसे सभी शाखाओं का मूल्यांकन करना होगा।
मुझे लगता है कि पीएल/एसक्यूएल में आपके पहले परीक्षण से पता चलता है कि coalsce
और case
ओरेकल राज्यों के रूप में पीएल/एसक्यूएल में शॉर्ट-सर्किट तर्क का उपयोग करें। SQL कथनों में अनुक्रम सहित आपका दूसरा परीक्षण दर्शाता है कि उस स्थिति में nextval
वैसे भी मूल्यांकन किया जाता है, भले ही परिणाम का उपयोग न किया गया हो, और Oracle भी इसका दस्तावेजीकरण करता है।
दोनों चीजों को एक साथ रखना थोड़ा अजीब लगता है, क्योंकि coalesce
और case
व्यवहार वास्तव में मेरे लिए भी असंगत प्रतीत होता है, लेकिन हमें यह भी ध्यान रखना होगा कि उस तर्क का कार्यान्वयन कार्यान्वयन पर निर्भर है (यहाँ मेरा स्रोत है
)