PL / SQL चर स्कोप & इनर आउटर ब्लॉक: नेस्टेड स्ट्रक्चर

विषय - सूची:

Anonim

नेस्टेड ब्लॉक ओरेकल क्या है?

PL / SQL में, प्रत्येक ब्लॉक को दूसरे ब्लॉक में नेस्ट किया जा सकता है। उन्हें नेस्टेड ब्लॉक के रूप में संदर्भित किया जाता है। जब हम किसी निश्चित प्रक्रिया को निष्पादित करना चाहते हैं, तो नेस्टेड ब्लॉक बहुत आम हैं, और साथ ही, इन प्रक्रिया के लिए कोड को एक अलग कंटेनर (ब्लॉक) में रखा जाना चाहिए।

नेस्ट ब्लॉक कॉन्सेप्ट प्रोग्रामर को प्रत्येक ब्लॉक में जटिल चीजों को अलग करने और मुख्य बाहरी ब्लॉक के अंदर प्रत्येक ब्लॉक के अपवाद को संभालने के लिए पठनीयता में सुधार करने में मदद करेगा।

इस ट्यूटोरियल में, आप सीखेंगे-

  • नेस्ट ब्लॉक स्ट्रक्चर
  • नेस्टेड ब्लॉक में स्कोप्स: चर स्कोप

नेस्ट ब्लॉक स्ट्रक्चर

एक ब्लॉक को दूसरे ब्लॉक में रखा जा सकता है। इसे निष्पादन भाग में या अपवाद हैंडलिंग भाग में नेस्टेड किया जा सकता है। इन ब्लॉक को लेबल भी किया जा सकता है। एक बाहरी ब्लॉक में कई आंतरिक ब्लॉक हो सकते हैं। प्रत्येक आंतरिक ब्लॉक एक बार फिर पीएल / एसक्यूएल ब्लॉक होता है, इसलिए आंतरिक ब्लॉक के सभी गुण और विशेषताएं बाहरी ब्लॉक के समान होंगे। नीचे दी गई छवि नेस्टेड ब्लॉक संरचना का सचित्र प्रतिनिधित्व देती है। पेरेंट ब्लॉक मुख्य ब्लॉक है और चाइल्ड ब्लॉक नेस्टेड ब्लॉक है।

नीचे नेस्टेड ब्लॉक के लिए सिंटैक्स है।

नेस्ट ब्लॉक सिंटेक्स

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • उपरोक्त सिंटैक्स नेस्टेड ब्लॉक को दिखाता है जिसमें कुल दो ब्लॉक होते हैं।
  • इन ब्लॉकों को 'बाहरी_ब्लॉक' और 'इनरब्लॉक' के रूप में लेबल किया गया है

नेस्टेड ब्लॉक में स्कोप्स: चर स्कोप

नेस्टेड ब्लॉक में, प्रत्येक को उपयोग करने से पहले प्रत्येक ब्लॉक के दायरे और दृश्यता को स्पष्ट रूप से समझने की आवश्यकता होती है। विशेष रूप से आंतरिक ब्लॉक में, बाहरी और आंतरिक ब्लॉक दोनों से तत्व दिखाई देंगे, इसलिए इस की उचित समझ आवश्यक है।

नीचे के अंक नेस्टेड ब्लॉक में स्कोप के बारे में अधिक संक्षेप में बताएंगे।

  • बाहरी ब्लॉक और मूल्य में घोषित किए गए तत्व जो आंतरिक ब्लॉक की परिभाषा से पहले आंतरिक ब्लॉक के अंदर दिखाई देते हैं।
  • आंतरिक ब्लॉक में घोषित तत्व बाहरी ब्लॉक में दिखाई नहीं देते हैं। वे केवल आंतरिक ब्लॉक के भीतर दिखाई देते हैं।
  • बाहरी ब्लॉक और इनर ब्लॉक एक ही नाम के साथ एक चर हो सकता है।
  • समान नाम वाले चर के मामले में, डिफ़ॉल्ट रूप से आंतरिक ब्लॉक, केवल आंतरिक ब्लॉक में घोषित चर का उल्लेख करेगा।
  • यदि आंतरिक ब्लॉक बाहरी ब्लॉक वैरिएबल को संदर्भित करना चाहता है, जिसका आंतरिक ब्लॉक के समान नाम है, तो बाहरी ब्लॉक LABELED होना चाहिए, और बाहरी ब्लॉक वेरिएबल को ' के रूप में संदर्भित किया जा सकता है।

नीचे दिए गए उदाहरण इन scopes के बारे में अधिक समझने में मदद करेंगे।

उदाहरण 1 : इस उदाहरण में, हम आंतरिक और बाहरी ब्लॉक में चर का दायरा देखने जा रहे हैं। इसके अलावा, हम यह देखने जा रहे हैं कि ब्लॉक लेबल का उपयोग करके चर कैसे देखें।

<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN<>DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_output.put_line(varl), ‭ ‬dbms_output.put_line(OUTER_BLOCKvar1);dbms_output.put_line(var2);END;var2:='value after inner block';END;/

कोड स्पष्टीकरण:

  • कोड लाइन 1 : बाहरी ब्लॉक को "OUTER_BLOCK" के रूप में लेबल करना।
  • कोड लाइन 3 : "बाहरी ब्लॉक" के प्रारंभिक मूल्य के साथ VARCHAR2 (30) के रूप में एक चर 'var1' की घोषणा।
  • कोड लाइन 4 : "चर से पहले मूल्य" के प्रारंभिक मूल्य के साथ VARCHAR2 (30) के रूप में एक चर 'var2' की घोषणा।
  • कोड लाइन 6: आंतरिक ब्लॉक को "INNER_BLOCK" के रूप में लेबल करना
  • कोड लाइन 8: "इनर ब्लॉक" के प्रारंभिक मूल्य के साथ VARCHAR2 (30) के रूप में आंतरिक ब्लॉक में एक चर 'var1' की घोषणा।
  • कोड लाइन 10: 'var1' के मान को छापना। चूंकि डिफ़ॉल्ट रूप से किसी भी लेबल का उल्लेख नहीं किया गया है, यह एक आंतरिक ब्लॉक से मूल्य लेगा, इसलिए 'इनर_ब्लॉक' संदेश को प्रिंट करना।
  • कोड लाइन 11: बाहरी ब्लॉक वेरिएबल 'var1' के मान को प्रिंट करना। चूंकि आंतरिक ब्लॉक समान नाम के साथ चर रहा है, इसलिए हमें बाहरी ब्लॉक लेबल को संदर्भित करना होगा। इस प्रकार 'बाहरी ब्लॉक' संदेश को प्रिंट करना।
  • कोड लाइन 12: बाहरी ब्लॉक वेरिएबल 'var2' के मान को प्रिंट करना। चूंकि आंतरिक ब्लॉक में मौजूद इस नाम के साथ कोई चर नहीं है, डिफ़ॉल्ट रूप से यह बाहरी ब्लॉक से मान लेगा, इसलिए 'इनर ब्लॉक से पहले मूल्य' संदेश को प्रिंट करना।
  • बाहरी ब्लॉक में चर 'var2' को 'आंतरिक ब्लॉक के बाद मूल्य' के साथ सौंपा गया है। लेकिन यह असाइनमेंट इनर ब्लॉक की परिभाषा के बाद हुआ है। इसलिए यह मान आंतरिक ब्लॉक में मौजूद नहीं है।

उदाहरण 2 : इस उदाहरण में, हम दो संख्याओं के बीच का अंतर खोजने जा रहे हैं, एक बाहरी ब्लॉक पर और दूसरा आंतरिक ब्लॉक में। दोनों का एक ही नाम होगा। आइए देखें कि इन चरों के संदर्भ में ब्लॉक लेबल कैसे उपयोगी है।

<>DECLAREln_val NUMBER :=5;BEGIN<>DECLAREln_val NUMBER :=3;BEGINdbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val);END;END;/

कोड स्पष्टीकरण:

  • कोड लाइन 1 : बाहरी ब्लॉक को "OUTER_BLOCK" के रूप में लेबल करना।
  • कोड लाइन 3 : "5" के प्रारंभिक मूल्य के साथ एक चर 'ln_val' को NUMBER के रूप में घोषित करना।
  • कोड लाइन 5: आंतरिक ब्लॉक को "INNER_BLOCK" के रूप में लेबल करना
  • कोड लाइन 7: "3" के प्रारंभिक मूल्य के साथ NUMBER के रूप में आंतरिक ब्लॉक में एक चर 'ln_val' की घोषणा।
  • कोड लाइन 9: बाहरी और आंतरिक ब्लॉक से 'ln_val' के मूल्य में अंतर को प्रिंट करना। "वैरिएबल_नाम>> <वैरिएबल_नाम>" समान चर नाम के कारण होने वाले टकराव से बचने के लिए इन चरों को संदर्भित करने के लिए प्रारूप का उपयोग किया जाता है।

सारांश

इस ट्यूटोरियल में, हमने सीखा है कि नेस्टेड ब्लॉक कैसे बनाया जाता है और इनर ब्लॉक और बाहरी ब्लॉक में स्कोप को कैसे हैंडल किया जाता है। हमने एक उदाहरण भी देखा है जहां आंतरिक और बाहरी ब्लॉक से चर को आंतरिक ब्लॉक के अंदर संदर्भित किया गया था।