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

नेस्टेड ब्लॉक क्या है? Oracle?
In PL / SQLप्रत्येक ब्लॉक को दूसरे ब्लॉक के अंदर समाहित किया जा सकता है। ऐसे ब्लॉक को नेस्टेड ब्लॉक कहा जाता है। नेस्टेड ब्लॉक तब बहुत आम होते हैं जब आप किसी प्रक्रिया को निष्पादित करना चाहते हैं जबकि एक ब्लॉक को दूसरे ब्लॉक के अंदर रखा जाता है।ping उस प्रक्रिया का कोड एक अलग कंटेनर (ब्लॉक) में रखें।
नेस्टेड ब्लॉक की अवधारणा जटिल लॉजिक को अलग-अलग ब्लॉकों में विभाजित करके प्रोग्रामर को पठनीयता में सुधार करने में मदद करती है, और यह अनुमति देती है कि अपवाद मुख्य बाहरी ब्लॉक के भीतर संभाले जाने वाले प्रत्येक ब्लॉक के लिए।
नेस्टेड ब्लॉक संरचना
एक ब्लॉक दूसरे ब्लॉक के भीतर नेस्टेड हो सकता है। यह निष्पादन भाग या अपवाद प्रबंधन भाग में नेस्टेड हो सकता है, और इन ब्लॉकों को लेबल भी किया जा सकता है। एक बाहरी ब्लॉक में कई आंतरिक ब्लॉक हो सकते हैं। प्रत्येक आंतरिक ब्लॉक स्वयं एक ब्लॉक होता है। 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;
- ऊपर दिया गया सिंटैक्स नेस्टेड ब्लॉक को दर्शाता है जिसमें कुल दो ब्लॉक शामिल हैं।
- इन ब्लॉकों को 'आउटर_ब्लॉक' और 'इनर_ब्लॉक' के रूप में लेबल किया गया है।
नेस्टेड ब्लॉक में स्कोप: वेरिएबल स्कोप
नेस्टेड ब्लॉक में, प्रत्येक ब्लॉक का उपयोग करने से पहले आपको उसके स्कोप और विजिबिलिटी को स्पष्ट रूप से समझना आवश्यक है। विशेष रूप से भीतरी ब्लॉक में, भीतरी और बाहरी दोनों ब्लॉकों के तत्व दिखाई देते हैं, इसलिए इसकी सही समझ होना अनिवार्य है।
नीचे दिए गए बिंदु नेस्टेड ब्लॉकों में स्कोप का सारांश प्रस्तुत करते हैं।
- बाहरी ब्लॉक में घोषित तत्व और आंतरिक ब्लॉक की परिभाषा से पहले परिभाषित मान, आंतरिक ब्लॉक के अंदर दिखाई देते हैं।
- आंतरिक ब्लॉक में घोषित तत्व बाहरी ब्लॉक में दिखाई नहीं देते हैं। वे केवल आंतरिक ब्लॉक के भीतर ही दिखाई देते हैं।
- बाहरी ब्लॉक और आंतरिक ब्लॉक में एक हो सकता है परिवर्तनशील इसी नाम से।
- समान नाम वाले वेरिएबल्स के मामले में, आंतरिक ब्लॉक डिफ़ॉल्ट रूप से केवल आंतरिक ब्लॉक में घोषित वेरिएबल को ही संदर्भित करता है।
- यदि आंतरिक ब्लॉक बाहरी ब्लॉक के उस चर को संदर्भित करना चाहता है जिसका नाम आंतरिक ब्लॉक के चर के समान है, तो बाहरी ब्लॉक को LABELLED किया जाना चाहिए, और बाहरी ब्लॉक के चर को ' के रूप में संदर्भित किया जा सकता है। . '.
नीचे दिया गया उदाहरण आपको इन स्कोपों के बारे में और अधिक समझने में मदद करेगा।
उदाहरण 1: इस उदाहरण में, हम आंतरिक और बाहरी ब्लॉक में चरों का दायरा देखते हैं। हम यह भी देखते हैं कि ब्लॉक लेबल का उपयोग करके चरों को कैसे संदर्भित किया जाता है।
नीचे दिया गया स्क्रीनशॉट उदाहरण 1 दिखाता है, जहां आंतरिक ब्लॉक ब्लॉक लेबल का उपयोग करके बाहरी ब्लॉक चर को संदर्भित करता है।
<<OUTER_BLOCK>> DECLARE var1 VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block'; BEGIN <<INNER_BLOCK>> DECLARE var1 VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(var1); dbms_output.put_line(OUTER_BLOCK.var1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code स्पष्टीकरण:
- Code पंक्ति 1: बाहरी ब्लॉक को “OUTER_BLOCK” के रूप में लेबल करना।
- Code पंक्ति 3: 'var1' नामक चर को VARCHAR2 (30) के रूप में घोषित करना, जिसका प्रारंभिक मान “outer_block” है।
- Code पंक्ति 4: 'var2' नामक चर को VARCHAR2 (30) के रूप में घोषित करना, जिसका प्रारंभिक मान "आंतरिक ब्लॉक से पहले का मान" है।
- Code पंक्ति 6: आंतरिक ब्लॉक को “INNER_BLOCK” के रूप में लेबल करना।
- Code पंक्ति 8: आंतरिक ब्लॉक में 'var1' नामक चर को VARCHAR2 (30) के रूप में घोषित करना, जिसका प्रारंभिक मान “inner_block” है।
- Code पंक्ति 10: 'var1' का मान प्रिंट किया जा रहा है। चूंकि कोई लेबल नहीं दिया गया है, इसलिए डिफ़ॉल्ट रूप से यह आंतरिक ब्लॉक से मान लेता है, जिसके परिणामस्वरूप 'inner_block' संदेश प्रिंट होता है।
- Code पंक्ति 11: बाहरी ब्लॉक के वेरिएबल 'var1' का मान प्रिंट किया जा रहा है। चूंकि आंतरिक ब्लॉक में इसी नाम का एक वेरिएबल है, इसलिए हम बाहरी ब्लॉक के लेबल का संदर्भ लेते हैं। इस प्रकार यह 'outer_block' संदेश प्रिंट करता है।
- Code पंक्ति 12: बाहरी ब्लॉक के वेरिएबल 'var2' का मान प्रिंट किया जा रहा है। चूंकि भीतरी ब्लॉक में इस नाम का कोई वेरिएबल नहीं है, इसलिए डिफ़ॉल्ट रूप से यह बाहरी ब्लॉक से मान लेता है, जिसके परिणामस्वरूप 'भीतरी ब्लॉक से पहले का मान' संदेश प्रिंट होता है।
- बाहरी ब्लॉक में स्थित 'var2' नामक वेरिएबल को 'भीतरी ब्लॉक के बाद का मान' असाइन किया गया है। लेकिन यह असाइनमेंट भीतरी ब्लॉक की परिभाषा के बाद होता है, इसलिए यह मान भीतरी ब्लॉक के अंदर मौजूद नहीं है।
उदाहरण 2: इस उदाहरण में, हम दो संख्याओं के बीच का अंतर ज्ञात करते हैं, जिनमें से एक बाहरी ब्लॉक में और दूसरी आंतरिक ब्लॉक में घोषित की गई है। दोनों का नाम समान है। आइए देखें कि इन चरों को संदर्भित करने में ब्लॉक लेबल कैसे उपयोगी है।
नीचे दिया गया स्क्रीनशॉट उदाहरण 2 को दर्शाता है, जो समान नाम वाले बाहरी और आंतरिक ब्लॉक चरों के बीच अंतर की गणना करता है।
<<OUTER_BLOCK>> DECLARE ln_val NUMBER :=5; BEGIN <<INNER_BLOCK>> 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; /
Code स्पष्टीकरण:
- Code पंक्ति 1: बाहरी ब्लॉक को “OUTER_BLOCK” के रूप में लेबल करना।
- Code पंक्ति 3: 'ln_val' नामक एक चर को NUMBER के रूप में घोषित किया जा रहा है, जिसका प्रारंभिक मान "5" है।
- Code पंक्ति 5: आंतरिक ब्लॉक को “INNER_BLOCK” के रूप में लेबल करना।
- Code पंक्ति 7: आंतरिक ब्लॉक में 'ln_val' नामक एक चर को NUMBER के रूप में घोषित करना, जिसका प्रारंभिक मान "3" है।
- Code पंक्ति 9: बाहरी और आंतरिक ब्लॉक से 'ln_val' के मान में अंतर प्रिंट करना। . एक ही वेरिएबल नाम के कारण होने वाले टकराव से बचने के लिए इन वेरिएबल्स को संदर्भित करने के लिए "" प्रारूप का उपयोग किया जाता है।




