Oracle PL/SQL IF THEN ELSE कथन: ELSIF, NESTED-IF
⚡ स्मार्ट सारांश
PL/SQL डिसीजन-मेकिंग स्टेटमेंट्स, बूलियन कंडीशन के आधार पर यह नियंत्रित करते हैं कि कौन सा कोड चलेगा। Oracle यह IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF और NESTED-IF प्रदान करता है, जिससे एक प्रोग्राम किसी ब्लॉक को छोड़ सकता है, दो रास्तों में से किसी एक को चुन सकता है या कई विकल्पों में से एक का चयन कर सकता है।

निर्णय लेने संबंधी वक्तव्य क्या हैं?
निर्णय लेने संबंधी कथन प्रवाह-नियंत्रण को निर्धारित करते हैं। एसक्यूएल ये कथन शर्तों पर आधारित होते हैं। ये प्रोग्रामर को किसी विशेष ब्लॉक को निष्पादित होने से रोकने या किसी शर्त के आधार पर वांछित ब्लॉक चुनने पर बेहतर नियंत्रण प्रदान करते हैं। नीचे निर्णय लेने वाले कथन का एक चित्र दिया गया है।

निर्णय लेने संबंधी कथनों के प्रकार: Oracle निम्नलिखित प्रकार प्रदान करता है।
- तो अगर
- यदि-तो-अन्यथा
- यदि-तो-ELSIF
- नेस्ट-अगर
- केस स्टडीज़
- खोजा गया मामला
इस ट्यूटोरियल में IF वेरिएंट्स को शामिल किया गया है। CASE और searched CASE फॉर्म्स को अगले ट्यूटोरियल में कवर किया गया है। PL/SQL CASE स्टेटमेंट मार्गदर्शक।
यदि-तो कथन
IF-THEN स्टेटमेंट का उपयोग किसी विशेष कोड सेक्शन को केवल तभी निष्पादित करने के लिए किया जाता है जब कोई शर्त पूरी होती है। शर्त पूरी होने पर एक त्रुटि आनी चाहिए। बूलियन (सही/गलत) मान। यह एक बुनियादी सशर्त कथन है जो अनुमति देता है Oracle पूर्व-परिभाषित शर्त के आधार पर कोड के एक भाग को निष्पादित करें या छोड़ दें।
IF-THEN कथनों के लिए वाक्य संरचना:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END IF;
- उपरोक्त वाक्य संरचना में, 'IF' कीवर्ड के बाद एक शर्त आती है जिसका मूल्यांकन 'TRUE' या 'FALSE' के रूप में होता है।
- नियंत्रण निष्पादित करता है केवल तभी जब शर्त पूरी हो .
- यदि स्थिति का मूल्यांकन इस प्रकार होता है SQL इसे छोड़ देता है और 'END IF' ब्लॉक के बाद कोड को निष्पादित करना शुरू कर देता है।
नोट: जब भी कोई शर्त 'NULL' के रूप में मूल्यांकित होती है, तो SQL 'NULL' को 'FALSE' के रूप में मानता है।
उदाहरण 1: इस उदाहरण में, जब संख्या 100 से अधिक होती है तो हम एक संदेश प्रिंट करते हैं।
DECLARE a NUMBER := 10; BEGIN dbms_output.put_line('Program started.'); IF( a > 100 ) THEN dbms_output.put_line('a is greater than 100'); END IF; dbms_output.put_line('Program completed.'); END; /
Code स्पष्टीकरण:
- Code पंक्ति 2: चर 'a' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '10' मान से आरंभ करना।
- Code पंक्ति 4: "प्रोग्राम शुरू हो गया" कथन को प्रिंट करना।
- Code पंक्ति 5: यह जांचना कि क्या चर 'a' '100' से बड़ा है।
- Code पंक्ति 6: यदि 'a' 100 से बड़ा है, तो "a 100 से बड़ा है" प्रिंट किया जाता है। यदि 'a' 100 से कम या उसके बराबर है, तो शर्त विफल हो जाती है और प्रिंटिंग स्टेटमेंट को अनदेखा कर दिया जाता है।
- Code पंक्ति 8: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना।
Code आउटपुट:
Program started. Program completed.
उदाहरण 2: इस उदाहरण में, यदि दिया गया अक्षर अंग्रेजी स्वर (A, E, I, O, U) है तो हम एक संदेश प्रिंट करते हैं।
DECLARE a CHAR(1) := 'u'; BEGIN IF UPPER(a) in ('A','E','I','O','U' ) THEN dbms_output.put_line('The character is in English Vowels'); END IF; END; /
Code स्पष्टीकरण:
- Code पंक्ति 2: 'a' नामक चर को 'CHAR' वर्ण के रूप में घोषित करना, जिसका आकार '1' है और इसे 'u' मान से आरंभ करना।
- Code पंक्ति 4: यह जांच की जा रही है कि चर 'a' सूची ('A','E','I','O','U') में मौजूद है या नहीं। तुलना करने से पहले 'a' के मान को अपरकेस में परिवर्तित किया जाता है, ताकि तुलना केस-इनसेंसिटिव हो।
- Code पंक्ति 5: यदि सूची में 'a' मौजूद है, तो "यह अक्षर अंग्रेजी स्वरों में है" प्रिंट होता है। यदि शर्त पूरी नहीं होती है, तो यह प्रोग्राम कोई आउटपुट नहीं देता है, क्योंकि IF-THEN ब्लॉक के बाहर कोई प्रिंटिंग स्टेटमेंट नहीं है।
Code आउटपुट:
The character is in English Vowels
यदि-तो-अन्यथा कथन
IF-THEN-ELSE कथन का उपयोग किसी शर्त के आधार पर दो विकल्पों में से किसी एक को चुनने के लिए किया जाता है। इसका वाक्य-विन्यास नीचे दिया गया है।
IF-THEN-ELSE कथनों के लिए सिंटैक्स:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block1> ELSE -execute if the condition failed (returns FALSE) <action_block2> END IF;
- कीवर्ड 'IF' के बाद एक शर्त आती है जिसका परिणाम 'TRUE' या 'FALSE' होता है।
- नियंत्रण निष्पादित होता है केवल तभी जब शर्त पूरी हो .
- यदि स्थिति का मूल्यांकन इस प्रकार होता है , SQL निष्पादित करता है .
- किसी भी स्थिति में, दोनों एक्शन ब्लॉकों में से एक को निष्पादित किया जाता है।
नोट: जब भी कोई शर्त 'NULL' के रूप में मूल्यांकित होती है, तो SQL 'NULL' को 'FALSE' के रूप में मानता है।
उदाहरण 1: इस उदाहरण में, हम यह प्रिंट करते हैं कि दी गई संख्या विषम है या सम।
DECLARE a NUMBER:= 11; BEGIN dbms_output.put_line ('Program started'); IF( mod(a,2)=0) THEN dbms_output.put_line('a is even number'); ELSE dbms_output.put_line('a is odd number'); END IF; dbms_output.put_line ('Program completed.'); END; /
Code स्पष्टीकरण:
- Code पंक्ति 2: चर 'a' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '11' मान से आरंभ करना।
- Code पंक्ति 4: "प्रोग्राम शुरू हो गया" कथन को प्रिंट करना।
- Code पंक्ति 5: यह जांचना कि चर 'a' का '2' से मापांक 0 है या नहीं।
- Code पंक्ति 6: यदि '0' है, तो "a एक सम संख्या है" मुद्रित किया जाता है।
- Code पंक्ति 7: यदि मापांक का मान '0' के बराबर नहीं है, तो शर्त वापस आ जाती है इसलिए “a एक विषम संख्या है” प्रिंट होता है।
- Code पंक्ति 10: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना।
Code आउटपुट:
Program started. a is odd number Program completed.
IF-THEN-ELSIF कथन
- IF-THEN-ELSIF कथन का उपयोग वहां किया जाता है जहां विकल्पों के एक समूह में से एक विकल्प का चयन किया जाना चाहिए, जहां प्रत्येक विकल्प की अपनी शर्त होती है।
- पहली शर्त जो वापस आती है यह प्रक्रिया पूरी हो जाती है और शेष शर्तें छोड़ दी जाती हैं।
- IF-THEN-ELSIF स्टेटमेंट में एक 'ELSE' ब्लॉक हो सकता है, जो तब निष्पादित होता है जब कोई भी शर्त पूरी नहीं होती है।
नोट: ELSE ब्लॉक वैकल्पिक है। यदि कोई ELSE ब्लॉक नहीं है और कोई भी शर्त पूरी नहीं होती है, तो कंट्रोलर सभी एक्शन ब्लॉक को छोड़ देता है और शेष कोड को निष्पादित करता है।
IF-THEN-ELSIF कथनों के लिए सिंटैक्स:
IF <condition1: returns Boolean> THEN -executed only if the condition returns TRUE <action_block1> ELSIF <condition2: returns Boolean> THEN <action_block2> ELSIF <condition3: returns Boolean> THEN <action_block3> ELSE --optional <action_block_else> END IF;
- नियंत्रण निष्पादित होता है केवल तभी जब कंडीशन1 रिटर्न करे .
- यदि कंडीशन 1 पूरी नहीं होती है, तो कंट्रोलर कंडीशन 2 की जांच करता है, और इसी तरह आगे भी।
- कंट्रोलर IF स्टेटमेंट से तब बाहर निकल जाता है जब उसे कोई ऐसी स्थिति मिलती है जो रिटर्न करती है। और यह संबंधित एक्शन ब्लॉक को चलाता है, या जब कोई भी ब्लॉक संतुष्ट नहीं होता है तो ELSE ब्लॉक (यदि मौजूद हो) चलता है।
नोट: जब भी कोई शर्त 'NULL' के रूप में मूल्यांकित होती है, तो SQL 'NULL' को 'FALSE' के रूप में मानता है।
उदाहरण 1: बिना ELSE ब्लॉक के। इस उदाहरण में, हम बिना किसी एल्स कंडीशन के दिए गए अंकों के आधार पर ग्रेड प्रिंट करते हैं (अंक >= 70 ग्रेड ए, अंक >= 40 और अंक < 70 ग्रेड बी, अंक >= 35 और अंक < 40 ग्रेड सी)।
DECLARE mark NUMBER := 55; BEGIN dbms_output.put_line('Program started.'); IF( mark >= 70) THEN dbms_output.put_line('Grade A'); ELSIF(mark >= 40 AND mark < 70) THEN dbms_output.put_line('Grade B'); ELSIF(mark >= 35 AND mark < 40) THEN dbms_output.put_line('Grade C'); END IF; dbms_output.put_line('Program completed.'); END; /
Code स्पष्टीकरण:
- Code पंक्ति 2: 'mark' नामक चर को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '55' मान से आरंभ करना।
- Code पंक्ति 4: "प्रोग्राम शुरू हो गया" कथन को प्रिंट करना।
- Code पंक्ति 5: शर्त 1 की जाँच करना, कि क्या 'मार्क' 70 से बड़ा या बराबर है।
- Code पंक्ति 7: चूंकि शर्त 1 विफल रही, इसलिए शर्त 2 '70 > अंक >= 40' की जाँच की जाती है।
- Code पंक्ति 8: स्थिति 2 लौटाती है इसलिए 'ग्रेड बी' संदेश मुद्रित होता है।
- Code पंक्ति 12: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना। शर्त 3 'मार्क < 35' को छोड़ दिया गया है, क्योंकि एक TRUE शर्त पहले ही पाई जा चुकी है।
Code आउटपुट:
Program started. Grade B Program completed.
उदाहरण 2: एक ELSE ब्लॉक के साथ। इस उदाहरण में, हम दिए गए अंकों के आधार पर ग्रेड प्रिंट करते हैं, जिसमें एक 'अन्य' शर्त भी शामिल है (अंक >= 70 होने पर ग्रेड A, अंक >= 40 और अंक < 70 होने पर ग्रेड B, अंक >= 35 और अंक < 40 होने पर ग्रेड C, अन्यथा 'कोई ग्रेड नहीं')।
DECLARE mark NUMBER := 25; BEGIN dbms_output.put_line('Program started.'); IF( mark >= 70) THEN dbms_output.put_line('Grade A'); ELSIF(mark >= 40 AND mark < 70) THEN dbms_output.put_line('Grade B'); ELSIF(mark >= 35 AND mark < 40) THEN dbms_output.put_line('Grade C'); ELSE dbms_output.put_line('No Grade'); END IF; dbms_output.put_line('Program completed.'); END; /
Code स्पष्टीकरण:
- Code पंक्ति 2: 'mark' नामक चर को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '25' मान से आरंभ करना।
- Code पंक्ति 4: "प्रोग्राम शुरू हो गया" कथन को प्रिंट करना।
- Code पंक्ति 5: शर्त 1 की जाँच करना, कि क्या 'मार्क' 70 से बड़ा या बराबर है।
- Code पंक्ति 7: चूंकि शर्त 1 विफल रही, इसलिए शर्त 2 '70 > अंक >= 40' की जाँच की जाती है।
- Code पंक्ति 9: चूंकि शर्त 2 विफल रही, इसलिए शर्त 3 '40 > अंक >= 35' की जाँच की जाती है।
- Code पंक्ति 11: चूंकि सभी शर्तें विफल रहीं, नियंत्रण ELSE ब्लॉक की जांच करता है और 'कोई ग्रेड नहीं' प्रिंट करता है।
- Code पंक्ति 14: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना।
Code आउटपुट:
Program started. No Grade Program completed.
नेस्टेड-आईएफ कथन
- नेस्टेड-आईएफ स्टेटमेंट प्रोग्रामरों को एक या एक से अधिक 'आईएफ' शर्तों को दूसरी 'आईएफ' शर्त के अंदर रखने की अनुमति देता है। .
- प्रत्येक 'IF' शर्त के लिए एक अलग 'END IF' कथन होना चाहिए, जो उस विशेष शर्त के दायरे की समाप्ति को दर्शाता है। .
- 'IF' स्टेटमेंट निकटतम 'END IF' को उस शर्त के लिए अंतिम बिंदु मानता है।
- NESTED-IF का सचित्र निरूपण नीचे दिखाया गया है।
IF <condition1: returns Boolean> THEN --executed only if the condition returns TRUE <action block1 starts> IF <condition2: returns Boolean> THEN <action_block2> END IF; --END IF corresponds to condition2 <action_block1 ends> END IF; --END IF corresponds to condition1
वाक्यविन्यास स्पष्टीकरण:
- बाहरी IF स्टेटमेंट के एक्शन ब्लॉक में एक और IF स्टेटमेंट शामिल है।
- यदि condition1 वापस आती है नियंत्रण निष्पादित करता है और कंडीशन 2 की जांच करता है।
- यदि कंडीशन2 भी रिटर्न करती है , तब इसका भी निष्पादन किया जाता है।
- यदि शर्त 2 का मूल्यांकन होता है , SQL स्किप .
नेस्टेड-आईएफ स्टेटमेंट का उदाहरण: तीन संख्याओं में सबसे बड़ी संख्या। इस उदाहरण में, हम नेस्टेड-इफ स्टेटमेंट का उपयोग करके तीन संख्याओं में से सबसे बड़ी संख्या प्रिंट करते हैं। संख्याओं को डिक्लेयर भाग में असाइन किया गया है (Number = 10, 15 और 20), और नेस्टेड-इफ स्टेटमेंट का उपयोग करके अधिकतम संख्या प्राप्त की गई है।
DECLARE a NUMBER := 10; b NUMBER := 15; c NUMBER := 20; BEGIN dbms_output.put_line('Program started.'); IF( a > b)THEN /*Nested-if 1 */ dbms_output.put_line('Checking Nested-IF 1'); IF( a > c ) THEN dbms_output.put_line('A is greatest'); ELSE dbms_output.put_line('C is greatest'); END IF; ELSE /*Nested-if2 */ dbms_output.put_line('Checking Nested-IF 2'); IF( b > c ) THEN dbms_output.put_line('B is greatest'); ELSE dbms_output.put_line('C is greatest'); END IF; END IF; dbms_output.put_line('Program completed.'); END; /
Code स्पष्टीकरण:
- Code पंक्ति 2-4: चर 'a', 'b' और 'c' को 'NUMBER' के रूप में घोषित करना और उन्हें 10, 15 और 20 से आरंभ करना।
- Code पंक्ति 6: "प्रोग्राम शुरू हो गया" कथन को प्रिंट करना।
- Code पंक्ति 7: शर्त 1 की जाँच करना, कि क्या 'a' 'b' से बड़ा है।
- Code पंक्ति 10: यदि 'a' 'b' से बड़ा है, तो नेस्टेड-इफ 1 जांच करता है कि क्या 'a' 'c' से बड़ा है।
- Code पंक्ति 11-13: यदि 'a' अभी भी बड़ा है, तो 'A सबसे बड़ा है' मुद्रित होता है; अन्यथा 'C सबसे बड़ा है' मुद्रित होता है।
- Code पंक्ति 18: यदि शर्त 1 गलत लौटाती है, तो नेस्टेड-इफ 2 जांच करता है कि 'b' 'c' से बड़ा है या नहीं।
- Code पंक्ति 19-21: यदि 'b' 'c' से बड़ा है, तो 'B सबसे बड़ा है' मुद्रित होता है; अन्यथा 'C सबसे बड़ा है' मुद्रित होता है।
- Code पंक्ति 24: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना।
कोड का आउटपुट:
Program started. Checking Nested-IF 2 C is greatest Program completed.
निर्णय लेने संबंधी कथनों की तुलना
नीचे दी गई तालिका में चर्चा किए गए विभिन्न सशर्त कथनों का सारांश दिया गया है, ताकि किसी भी स्थिति के लिए सही कथन का चयन किया जा सके।
| प्रकार | विवरण | प्रयोग |
|---|---|---|
| तो अगर | यह एक बूलियन स्थिति की जाँच करता है; यदि सत्य है, तो 'THEN' ब्लॉक में मौजूद कोड निष्पादित होता है। | किसी शर्त के आधार पर किसी विशेष ब्लॉक को छोड़ना या निष्पादित करना। |
| यदि-तो-अन्यथा | यह एक बूलियन स्थिति की जाँच करता है; यदि सत्य है तो 'THEN' ब्लॉक चलता है, यदि असत्य है तो 'ELSE' ब्लॉक चलता है। | यह या वह वाली स्थिति में सबसे उपयुक्त है। |
| यदि-तो-ELSIF | यह क्रमानुसार शर्तों की जाँच करता है। जो पहला ब्लॉक TRUE लौटाता है, वही निष्पादित होता है। यदि कोई भी ब्लॉक TRUE नहीं है, तो 'ELSE' ब्लॉक चलता है। | दो से अधिक विकल्पों में से चुनने के लिए उपयोग किया जाता था। |
| नेस्ट-अगर | यह एक या एक से अधिक IF-THEN या IF-THEN-ELSIF कथनों को दूसरे के अंदर रखने की अनुमति देता है। | मुख्यतः नेस्टेड कंडीशन की स्थिति में उपयोग किया जाता है। |


