Oracle PL/SQL IF THEN ELSE कथन: ELSIF, NESTED-IF

निर्णय लेने संबंधी वक्तव्य क्या हैं?

निर्णय लेने वाले कथन वे हैं जो प्रवाह-नियंत्रण का निर्णय लेंगे एसक्यूएल शर्तों के आधार पर कथन। यह प्रोग्रामर को किसी विशेष कोड को निष्पादित करने से रोकने (आरेख 1) या शर्त के आधार पर वांछित कोड चुनने (आरेख 2) का बेहतर नियंत्रण देता है। नीचे "निर्णय लेने वाले कथन" का सचित्र प्रतिनिधित्व है।

निर्णय लेने का विवरण आरेख
निर्णय लेने का विवरण आरेख

निर्णय लेने वाले वक्तव्यों के प्रकार:

Oracle निम्नलिखित प्रकार के निर्णय लेने वाले वक्तव्य प्रदान करता है।

  • तो अगर
  • यदि-तो-अन्यथा
  • यदि-तो-ELSIF
  • नेस्ट-अगर
  • 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 से अधिक होगी। इसके लिए, हम निम्नलिखित कोड निष्पादित करेंगे

जब किसी संख्या का मान 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;
/

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

  • कोड पंक्ति 2: चर 'a' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '10' मान के साथ आरंभ करना।
  • कोड पंक्ति 4: “प्रोग्राम प्रारंभ हुआ” कथन मुद्रित किया जा रहा है।
  • कोड पंक्ति 5: स्थिति की जाँच करना, कि क्या चर 'a' '100' से अधिक है।
  • कोड लाइन 6: यदि 'a' '100' से बड़ा है, तो "a 100 से बड़ा है" प्रिंट किया जाएगा। यदि 'a' 100 से कम या बराबर है, तो शर्त विफल हो जाती है, इसलिए उपरोक्त प्रिंटिंग कथन को अनदेखा कर दिया जाता है।
  • कोड पंक्ति 8: “प्रोग्राम पूर्ण हुआ” कथन मुद्रित किया जा रहा है।

कोड आउटपुट:

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;
/

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

  • कोड पंक्ति 2: चर 'a' को 'CHAR' आकार '1' डेटा प्रकार के रूप में घोषित करना तथा इसे 'u' मान के साथ आरंभीकृत करना।
  • कोड पंक्ति 4: स्थिति की जाँच करना, कि क्या चर 'a' सूची ('A','E','I','O','U') में मौजूद है।
  • तुलना करने से पहले 'a' का मान अपरकेस में परिवर्तित कर दिया गया है, ताकि तुलना केस-असंवेदनशील हो।
  • कोड पंक्ति 5: यदि सूची में 'a' मौजूद है, तो कथन "वर्ण अंग्रेजी स्वरों में है" मुद्रित किया जाएगा। यदि शर्त विफल हो जाती है, तो यह प्रोग्राम कोई आउटपुट नहीं देगा, क्योंकि IF-THEN ब्लॉक के बाहर हमने कोई मुद्रण कथन जारी नहीं किया है।

कोड आउटपुट:

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;
/

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

  • कोड पंक्ति 2: चर 'a' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '11' मान के साथ आरंभ करना।
  • कोड पंक्ति 4: “प्रोग्राम प्रारंभ हुआ” कथन मुद्रित किया जा रहा है।
  • कोड पंक्ति 5: स्थिति की जाँच करना, कि क्या चर 'a' का '2' से मापांक 0 है।
  • कोड लाइन 6: यदि '0' है, तो “a सम संख्या है” मुद्रित किया जाएगा।
  • कोड लाइन 7: यदि मापांक मान '0' के बराबर नहीं है, तो स्थिति वापस आती है , तो संदेश “a विषम संख्या है” मुद्रित होगा।
  • कोड लाइन10: “प्रोग्राम पूरा हुआ” कथन प्रिंट करना

कोड आउटपुट:

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;
/

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

  • कोड पंक्ति 2: चर 'mark' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना तथा इसे '55' मान के साथ आरंभीकृत करना।
  • कोड पंक्ति 4: “प्रोग्राम प्रारंभ हुआ” कथन मुद्रित किया जा रहा है।
  • कोड लाइन 5: शर्त 1 की जांच करना, कि क्या 'चिह्न' 70 से बड़ा है या बराबर है।
  • कोड पंक्ति 7: चूंकि शर्त 1 विफल हो गई, इसलिए शर्त 2 '70>mark>=40′ की जाँच की जाती है।
  • कोड लाइन 8: कंडीशन2 रिटर्न करता है , इसलिए संदेश 'ग्रेड बी' मुद्रित किया जाएगा।
  • कोड पंक्ति 12: “प्रोग्राम पूर्ण हुआ” कथन मुद्रित किया जा रहा है।
  • इस स्थिति में, condition3 'mark < 35' को छोड़ दिया जाएगा, क्योंकि नियंत्रक को एक शर्त मिली है जो लौटाती है शर्त 3 ​​से पहले.

कोड आउटपुट:

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;
/

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

  • कोड पंक्ति 2: चर 'mark' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना तथा इसे '25' मान के साथ आरंभीकृत करना।
  • कोड पंक्ति 4: “प्रोग्राम प्रारंभ हुआ” कथन मुद्रित किया जा रहा है।
  • कोड लाइन 5: शर्त 1 की जांच करना, कि क्या 'चिह्न' 70 से बड़ा है या बराबर है।
  • कोड पंक्ति 7: चूंकि शर्त 1 विफल हो गई, इसलिए शर्त 2 '70>mark>=40′ की जाँच की जाती है।
  • कोड पंक्ति 8: चूंकि शर्त 2 विफल हो गई, इसलिए शर्त 3 '40>mark>=35′ की जाँच की जाती है।
  • कोड पंक्ति 11: चूंकि सभी शर्तें विफल हो गई हैं, इसलिए नियंत्रण अब ELSE ब्लॉक की उपस्थिति की जांच करेगा, और यह ELSE ब्लॉक से 'नो ग्रेड' संदेश प्रिंट करेगा।
  • कोड पंक्ति 14: “प्रोग्राम पूर्ण हुआ” कथन मुद्रित किया जा रहा है।

कोड आउटपुट:

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;
/

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

  • कोड पंक्ति 2: चर 'a' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '10' मान के साथ आरंभ करना।
  • कोड पंक्ति 3: चर 'b' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '15' मान के साथ आरंभ करना।
  • कोड पंक्ति 4: चर 'c' को 'NUMBER' डेटा प्रकार के रूप में घोषित करना और इसे '20' मान के साथ आरंभ करना।
  • कोड पंक्ति 6: कथन “प्रोग्राम प्रारंभ हुआ” (पंक्ति 6) मुद्रित करना।
  • कोड पंक्ति 7: शर्त 1 की जाँच करना, कि क्या 'a', 'b' से बड़ा है (पंक्ति 7)।
  • कोड पंक्ति 10: यदि 'a', 'b' से बड़ा है, तो 'nested-if 1' में शर्त यह जाँच करेगी कि क्या 'a', 'c' से बड़ा है (पंक्ति 10)।
  • कोड लाइन 13: यदि फिर भी 'a' बड़ा है, तो संदेश 'A सबसे बड़ा है' प्रिंट किया जाएगा (लाइन 11)। अन्यथा यदि शर्त 2 विफल हो जाती है, तो 'C सबसे बड़ा है' प्रिंट किया जाएगा (लाइन 13)।
  • कोड पंक्ति 18: यदि condition1 गलत लौटाती है, तो 'nested-if 2' में condition जाँच करेगी कि क्या 'b', 'c' से बड़ा है (पंक्ति 18)।
  • कोड पंक्ति 21: यदि 'b', 'c' से बड़ा है, तो संदेश 'B सबसे बड़ा है' मुद्रित किया जाएगा (पंक्ति 19), अन्यथा यदि शर्त 2 विफल हो जाती है, तो 'C सबसे बड़ा है' मुद्रित किया जाएगा (पंक्ति 21)।
  • कोड पंक्ति 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 कथन के अंदर अनुमति देता है। मुख्य रूप से नेस्टेड स्थिति में उपयोग किया जाता है।