Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

CASE और COALESCE शॉर्ट-सर्किट मूल्यांकन PL/SQL में अनुक्रमों के साथ काम करता है लेकिन SQL में नहीं

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 व्यवहार वास्तव में मेरे लिए भी असंगत प्रतीत होता है, लेकिन हमें यह भी ध्यान रखना होगा कि उस तर्क का कार्यान्वयन कार्यान्वयन पर निर्भर है (यहाँ मेरा स्रोत है )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विभाजन के भीतर गैर-शून्य मानों को ऊपर ले जाएं

  2. वीएस 2013 में वर्तमान ओरेकल ओडीएसी कनेक्टिविटी क्यों दिखाई नहीं दे रही है?

  3. ऐप ए से ऐप बी डब्ल्यू/समान क्रेडेंशियल पर नेविगेट करें - एपेक्स 19.2

  4. ऑरैकल डीबी में एकाधिक टेबल कैसे अपडेट करें?

  5. Oracle 10 उदाहरणों के साथ PL/SQL में टेबल कमांड बनाएं