Oracle PL/SQL IF THEN ELSE कथन: ELSIF, NESTED-IF
निर्णय लेने संबंधी वक्तव्य क्या हैं?
निर्णय लेने वाले कथन वे हैं जो प्रवाह-नियंत्रण का निर्णय लेंगे एसक्यूएल शर्तों के आधार पर कथन। यह प्रोग्रामर को किसी विशेष कोड को निष्पादित करने से रोकने (आरेख 1) या शर्त के आधार पर वांछित कोड चुनने (आरेख 2) का बेहतर नियंत्रण देता है। नीचे "निर्णय लेने वाले कथन" का सचित्र प्रतिनिधित्व है।

निर्णय लेने वाले वक्तव्यों के प्रकार:
Oracle निम्नलिखित प्रकार के निर्णय लेने वाले वक्तव्य प्रदान करता है।
- तो अगर
- यदि-तो-अन्यथा
- यदि-तो-ELSIF
- नेस्ट-अगर
- केस स्टडीज़
- खोजा गया मामला
यदि-तो कथन
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 से अधिक होगी। इसके लिए, हम निम्नलिखित कोड निष्पादित करेंगे
जब किसी संख्या का मान 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) में मौजूद है।
जब दिया गया वर्ण Vowel हो तो संदेश मुद्रित करने के लिए हम निम्नलिखित कोड निष्पादित करते हैं।
DECLARE
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','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-THEN-ELSE कथनों के लिए सिंटैक्स:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_blockl> 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 number1);
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 ब्लॉक वैकल्पिक है। यदि कोई ELSE ब्लॉक नहीं है, और कोई भी शर्त पूरी नहीं होती है, तो नियंत्रक सभी एक्शन ब्लॉक को छोड़ देगा और कोड के शेष भाग को निष्पादित करना शुरू कर देगा।
IF-THEN-ELSIF कथनों के लिए सिंटैक्स:
IF <conditionl: returns Boolean> THEN -executed only if the condition returns TRUE < action_blockl> ELSIF <condition2 returns Boolean> < action_block2> ELSIF <condition3:returns Boolean> < action_block3> ELSE —optional <action_block_else> END if;
- उपरोक्त सिंटैक्स में, नियंत्रण निष्पादित करेगा केवल तभी जब condition1 वापस आए .
- यदि शर्त 1 संतुष्ट नहीं है, तो नियंत्रक शर्त 2 की जांच करेगा।
- निम्नलिखित दो मामलों में नियंत्रक IF-स्टेटमेंट से बाहर निकल जाएगा।
- जब नियंत्रक को कोई ऐसी स्थिति मिले जो वापस लौटती है इस स्थिति में, संबंधित action_block निष्पादित किया जाएगा और नियंत्रक इस IF-स्टेटमेंट ब्लॉक से बाहर निकल जाएगा और शेष कोड निष्पादित करना शुरू कर देगा।
- जब कोई भी शर्त पूरी नहीं होती, तो नियंत्रक ELSE ब्लॉक (यदि मौजूद हो) को निष्पादित करेगा, फिर IF-स्टेटमेंट से बाहर निकल जाएगा।
नोट: जब भी स्थिति का मूल्यांकन '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>mark>=40' की जाँच की जाती है।
- Code पंक्ति 8: शर्त 2 लौटाती है इसलिए 'ग्रेड बी' संदेश प्रिंट होगा।
- Code पंक्ति 12: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना।
- इस स्थिति में, condition3 'mark < 35' को छोड़ दिया जाएगा, क्योंकि नियंत्रक को एक शर्त मिली है जो लौटाती है शर्त 3 से पहले.
Code आउटपुट:
Program started. Grade B Program completed.
उदाहरण 2: ELSE ब्लॉक के साथ
इस उदाहरण में, हम दिए गए अंकों के आधार पर ग्रेड प्रिंट करने जा रहे हैं, अन्यथा शर्त के साथ (अंक >= 70 ग्रेड ए, अंक >=40 और अंक<70 ग्रेड बी, अंक >=35 और अंक<40 ग्रेड सी, अन्यथा 'कोई ग्रेड नहीं')।
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>mark>=40' की जाँच की जाती है।
- Code पंक्ति 8: चूंकि शर्त 2 विफल रही, इसलिए शर्त 3 '40>mark>=35' की जाँच की जाती है।
- Code पंक्ति 11: चूंकि सभी शर्तें विफल हो गई हैं, नियंत्रण अब ELSE ब्लॉक की उपस्थिति की जांच करेगा, और यह ELSE ब्लॉक से 'कोई ग्रेड नहीं' संदेश प्रिंट करेगा।
- Code पंक्ति 14: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना।
Code आउटपुट:
Program started. No Grade Program completed.
नेस्टेड-आईएफ कथन
- NESTED-IF कथन मूलतः प्रोग्रामर को एक या अधिक 'IF' शर्त को अन्य 'IF' शर्त के अंदर रखने की अनुमति देता है। सामान्य बयानों के अलावा.
- प्रत्येक 'IF' शर्त में एक अलग 'END IF' कथन होना चाहिए जो उस विशेष शर्त के दायरे के अंत को दर्शाता है। .
- 'IF' कथन, उस विशेष स्थिति के लिए निकटतम 'END IF' कथन को समापन बिंदु मानेगा।
- NESTED-IF का चित्रात्मक प्रतिनिधित्व नीचे आरेख में दिखाया गया है।
IF <conditionl: 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_blockl ends> END IF; —END IF corresponds to condition1
वाक्यविन्यास स्पष्टीकरण:
- उपरोक्त सिंटैक्स में, बाहरी IF के एक्शन ब्लॉक में एक और IF कथन शामिल होता है।
- शर्त1 वापस आती है , तो नियंत्रण निष्पादित होगा और स्थिति1 की जांच करता है.
- यदि condition2 भी लौटती है , तब भी निष्पादित किया जाएगा.
- शर्त 2 के मामले में इसका मूल्यांकन होता है फिर, SQL छोड़ देगा .
यहाँ हम नेस्टेड इफ का एक उदाहरण देखने जा रहे हैं –
नेस्टेड-इफ स्टेटमेंट का उदाहरण: तीन में से सबसे बड़ी संख्या
इस उदाहरण में, हम नेस्टेड-इफ स्टेटमेंट का उपयोग करके तीन संख्याओं में से सबसे बड़ी संख्या को प्रिंट करने जा रहे हैं। संख्याएँ घोषित भाग में निर्दिष्ट की जाएँगी, जैसा कि आप नीचे दिए गए कोड में देख सकते हैं, यानी संख्या = 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 l */
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: चर 'a' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '10' मान से आरंभ करना।
- Code पंक्ति 3: चर 'b' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '15' मान से आरंभ करना।
- Code पंक्ति 4: चर 'c' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '20' मान से आरंभ करना।
- Code पंक्ति 6: "प्रोग्राम शुरू हो गया" कथन को प्रिंट करना (पंक्ति 6)।
- Code पंक्ति 7: शर्त 1 की जाँच करना, कि क्या 'a' 'b' से बड़ा है (पंक्ति 7)।
- Code पंक्ति 10: यदि 'a' 'b' से बड़ा है, तो 'नेस्टेड-इफ 1' में शर्त यह जांच करेगी कि क्या 'a' 'c' से बड़ा है (पंक्ति 10)।
- Code पंक्ति 13: यदि अभी भी 'a' बड़ा है, तो 'A सबसे बड़ा है' संदेश मुद्रित होगा (पंक्ति 11)। अन्यथा यदि शर्त 2 विफल हो जाती है, तो 'C सबसे बड़ा है' मुद्रित होगा (पंक्ति 13)।
- Code पंक्ति 18: यदि शर्त 1 गलत है, तो 'नेस्टेड-इफ 2' में शर्त यह जांच करेगी कि 'बी' 'सी' से बड़ा है या नहीं (पंक्ति 18)।
- Code पंक्ति 21: यदि 'b' 'c' से बड़ा है, तो संदेश 'B सबसे बड़ा है' मुद्रित किया जाएगा (पंक्ति 19), अन्यथा यदि शर्त 2 विफल हो जाती है, तो 'C सबसे बड़ा है' मुद्रित किया जाएगा (पंक्ति 21)।
- Code पंक्ति 24: "प्रोग्राम पूर्ण हो गया" कथन को प्रिंट करना (पंक्ति 24)।
कोड का आउटपुट:
Program started. Checking Nested-IF 2 C is greatest Program completed.
सारांश
इस अध्याय में हमने विभिन्न निर्णय-निर्धारण कथनों और उनके वाक्यविन्यास और उदाहरणों के बारे में सीखा है। नीचे दी गई तालिका में विभिन्न सशर्त कथनों का सारांश दिया गया है, जिन पर हमने चर्चा की है।
| TYPE | वर्णन | उपयोग |
|---|---|---|
| तो अगर | बूलियन स्थिति की जांच करता है, यदि सत्य है तो 'THEN' ब्लॉक में कोड निष्पादित किया जाएगा। | शर्त के आधार पर किसी विशेष कोड को छोड़ने/निष्पादित करने के लिए। |
| यदि-तो-अन्यथा | बूलियन स्थिति की जांच करता है, यदि सत्य है तो 'THEN' ब्लॉक में कोड निष्पादित किया जाएगा, यदि असत्य है तो 'ELSE' ब्लॉक में कोड निष्पादित किया जाएगा। | 'यह-या-वह' स्थिति में सबसे उपयुक्त। |
| यदि-तो-ELSIF | अनुक्रमिक क्रम में बूलियन शर्त की जाँच करता है। अनुक्रम में पहला ब्लॉक जो TRUE शर्त लौटाता है, उसे निष्पादित किया जाएगा। यदि अनुक्रम में कोई भी शर्त TRUE नहीं है, तो 'ELSE' ब्लॉक में कोड निष्पादित किया जाता है। | अधिकतर दो से अधिक विकल्पों में से चयन करने के लिए उपयोग किया जाता है। |
| नेस्ट-अगर | एक या अधिक IF-THEN या IF-THEN-ELSIF कथन को किसी अन्य IF-THEN या IF-THEN-ELSIF कथन के अंदर अनुमति देता है। | मुख्य रूप से नेस्टेड स्थिति में उपयोग किया जाता है। |


