PL/SQL वैरिएबल स्कोप और इनर आउटर ब्लॉक: नेस्टेड संरचना

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

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

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

नेस्टेड ब्लॉक संरचना

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

नेस्टेड ब्लॉक संरचना

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

नेस्टेड ब्लॉक संरचना

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

<<outer_block>>
DECLARE
 <Declarative section> 
BEGIN
 <Execution part for outer block begins>

 <<inner block>>
 DECLARE
  <Declarative section>
 BEGIN
  <Execution part for inner block>.
 EXCEPTION 
  <Exception handling part>
 END;

 <Execution part for outer block begins> 
EXCEPTION 
<Exception handling part>
END;
  • उपरोक्त सिंटैक्स नेस्टेड ब्लॉक को दर्शाता है जिसमें कुल दो ब्लॉक होते हैं।
  • इन ब्लॉकों को 'outer_block' और 'inner_block' के रूप में लेबल किया गया है

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

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

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

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

नीचे दिया गया उदाहरण इन क्षेत्रों के बारे में अधिक समझने में मदद करेगा।

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

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

<<OUTER_BLOC>>
DECLARE
varl VARCHAR2(30):='outer_block';
var2 VARCHAR2(30):='value before inner block’;
BEGIN
<<NNER_BLOCK>>
DECLARE
varl VARCHAR2(30):='inner_block';
BEGIN
dbms_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: एक चर 'var1' को "बाहरी ब्लॉक" के प्रारंभिक मान के साथ VARCHAR2 (30) के रूप में घोषित करना।
  • कोड लाइन 4: एक चर 'var2' को VARCHAR2 (30) के रूप में "आंतरिक ब्लॉक से पहले मूल्य" के प्रारंभिक मूल्य के साथ घोषित करना।
  • कोड पंक्ति 6: आंतरिक ब्लॉक को “INNER_BLOCK” के रूप में लेबल करना
  • कोड पंक्ति 8: आंतरिक ब्लॉक में एक चर 'var1' को "आंतरिक ब्लॉक" के प्रारंभिक मान के साथ VARCHAR2 (30) के रूप में घोषित करना।
  • कोड पंक्ति 10: 'var1' का मान प्रिंट किया जा रहा है। चूंकि डिफ़ॉल्ट रूप से कोई लेबल उल्लेखित नहीं है, इसलिए यह मान इनर ब्लॉक से लेगा, इसलिए 'inner_block' संदेश प्रिंट होगा।
  • कोड पंक्ति 11: बाहरी ब्लॉक चर 'var1' का मान प्रिंट करना। चूँकि आंतरिक ब्लॉक में समान नाम वाला चर है, इसलिए हमें बाहरी ब्लॉक लेबल को संदर्भित करने की आवश्यकता है। इस प्रकार 'बाहरी ब्लॉक' संदेश प्रिंट हो रहा है।
  • कोड पंक्ति 12: बाहरी ब्लॉक चर 'var2' का मान प्रिंट करना। चूँकि आंतरिक ब्लॉक में इस नाम का कोई चर मौजूद नहीं है, इसलिए डिफ़ॉल्ट रूप से यह बाहरी ब्लॉक से मान लेगा, इसलिए 'आंतरिक ब्लॉक से पहले मान' संदेश प्रिंट होगा।
  • बाहरी ब्लॉक में चर 'var2' को 'आंतरिक ब्लॉक के बाद मान' के साथ असाइन किया गया है। लेकिन यह असाइनमेंट आंतरिक ब्लॉक की परिभाषा के बाद हुआ है। इसलिए यह मान आंतरिक ब्लॉक में मौजूद नहीं है।

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

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

<<OUTER_BLOC>>
DECLARE 
ln_val NUMBER :=5;
BEGIN
<<INNERBLOC>>
DECLARE 
ln_val NUMBER :=3;
BEGIN
dbms_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: एक चर 'ln_val' को NUMBER के रूप में घोषित करना जिसका प्रारंभिक मान “5” है।
  • कोड पंक्ति 5: आंतरिक ब्लॉक को “INNER_BLOCK” के रूप में लेबल करना
  • कोड पंक्ति 7: आंतरिक ब्लॉक में एक चर 'ln_val' को NUMBER के रूप में घोषित करना, जिसका प्रारंभिक मान “3” है।
  • कोड पंक्ति 9: बाहरी और आंतरिक ब्लॉक से 'ln_val' के मूल्य में अंतर प्रिंट करना। . समान चर नाम के कारण टकराव से बचने के लिए इन चरों को संदर्भित करने के लिए ” प्रारूप का उपयोग किया जाता है।

सारांश

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