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

Oracle SQL:इनलाइन दृश्य में मौजूद होने पर SYS_GUID () के व्यवहार को समझना?

दस्तावेज़ीकरण एक कारण बताता है कि आप एक विसंगति क्यों देख सकते हैं (जोर मेरा):

<ब्लॉककोट>

सावधानी:

क्योंकि SQL अनिवार्य (या प्रक्रियात्मक) के बजाय एक घोषणात्मक भाषा है, आप यह नहीं जान सकते कि SQL कथन द्वारा लागू किया गया फ़ंक्शन कितनी बार चलेगा —भले ही फ़ंक्शन PL/SQL में लिखा गया हो, एक अनिवार्य भाषा। यदि आपके एप्लिकेशन के लिए यह आवश्यक है कि किसी फ़ंक्शन को एक निश्चित संख्या में निष्पादित किया जाए, तो उस फ़ंक्शन को SQL कथन से लागू न करें। इसके बजाय एक कर्सर का प्रयोग करें।

उदाहरण के लिए, यदि आपके एप्लिकेशन को प्रत्येक चयनित पंक्ति के लिए एक फ़ंक्शन को कॉल करने की आवश्यकता है, तो एक कर्सर खोलें, कर्सर से पंक्तियों का चयन करें, और प्रत्येक पंक्ति के लिए फ़ंक्शन को कॉल करें। यह तकनीक गारंटी देती है कि फ़ंक्शन पर कॉल की संख्या कर्सर से प्राप्त पंक्तियों की संख्या है।

मूल रूप से, Oracle यह निर्दिष्ट नहीं करता है कि किसी sql स्टेटमेंट के अंदर कितनी बार फ़ंक्शन को कॉल किया जाएगा:यह अन्य कारकों के बीच रिलीज़, पर्यावरण, एक्सेस पथ पर निर्भर हो सकता है।

हालांकि, क्वेरी रीराइट को सीमित करने के तरीके हैं, जैसा कि नेस्टेड सबक्वायरीज़ के अननेस्टिंग अध्याय में बताया गया है:

<ब्लॉककोट>

सबक्वायरी अननेस्टिंग अननेस्ट करता है और सबक्वेरी के बॉडी को स्टेटमेंट के बॉडी में मर्ज करता है, जिससे ऑप्टिमाइज़र एक्सेस पाथ और जॉइन का मूल्यांकन करते समय उन पर एक साथ विचार कर सकता है। ऑप्टिमाइज़र कुछ अपवादों के साथ . अधिकांश सबक्वेरी को अननेस्ट कर सकता है . उन अपवादों में पदानुक्रमित उपश्रेणियाँ और उपश्रेणियाँ शामिल हैं जिनमें एक ROWNUM स्यूडोकॉलम, सेट ऑपरेटरों में से एक, एक नेस्टेड एग्रीगेट फ़ंक्शन, या एक क्वेरी ब्लॉक का एक सहसंबद्ध संदर्भ है जो सबक्वेरी का तत्काल बाहरी क्वेरी ब्लॉक नहीं है।

जैसा कि ऊपर बताया गया है, आप ROWNUM . का उपयोग कर सकते हैं Oracle को सबक्वेरी को अननेस्ट करने से रोकने के लिए छद्म-स्तंभ:

SQL> WITH data AS (SELECT SYS_GUID() uuid FROM DUAL WHERE ROWNUM >= 1)
  2  SELECT uuid, uuid FROM data;

UUID                             UUID
-------------------------------- --------------------------------
1ADF387E847F472494A869B033C2661A 1ADF387E847F472494A869B033C2661A


  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. ओरेकल पीएल/एसक्यूएल - एक साधारण सरणी चर कैसे बनाएं?

  3. लिंक टू एंटिटीज ग्रुप बाय (बाहरी आवेदन) oracle 11.2.0.3.0 लागू का समर्थन नहीं करता है

  4. Oracle में एक तिथि के लिए सामान्य संकेतक जोड़ें

  5. पीएल/एसक्यूएल में डायनेमिक सेलेक्ट इनटू क्लॉज के साथ बाइंड वेरिएबल्स का उपयोग करना