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

⚡ स्मार्ट सारांश

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

  • 🔀 उद्देश्य: TRUE या FALSE लौटाने वाली शर्त निष्पादन के प्रवाह को निर्धारित करती है।
  • यदि-तो: यह ब्लॉक तभी चलता है जब शर्त सही हो, अन्यथा इसे छोड़ दिया जाता है।
  • यदि-तो-अन्यथा: यह दो ब्लॉकों में से एक का चयन करता है, एक सही (TRUE) के लिए और दूसरा गलत (FALSE) के लिए।
  • 🪜 यदि-तो-अन्यथा: यह परीक्षण शर्तों को क्रमानुसार जांचता है और जो शर्त सबसे पहले सत्य पाई जाती है उसे लागू करता है, साथ ही एक वैकल्पिक ELSE विकल्प भी मौजूद होता है।
  • 🧩 नेस्टेड-आईएफ: संयुक्त स्थितियों के लिए एक IF के अंदर दूसरा IF रखता है।
  • ⚠️ शून्य नियम: जो स्थिति NULL के रूप में मूल्यांकित होती है, उसे FALSE माना जाता है।
  • 🔚 टर्मिनेटर: प्रत्येक IF स्टेटमेंट को एक उपयुक्त END IF स्टेटमेंट के साथ बंद किया जाना चाहिए।

Oracle पीएल/एसक्यूएल IF THEN ELSE ELSIF

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

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

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

निर्णय लेने संबंधी कथनों के प्रकार: 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 स्टेटमेंट का प्रवाह

नेस्टेड 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 कथनों को दूसरे के अंदर रखने की अनुमति देता है। मुख्यतः नेस्टेड कंडीशन की स्थिति में उपयोग किया जाता है।

अक्सर पूछे जाने वाले प्रश्न

ELSIF परस्पर अनन्य शर्तों के एक सपाट अनुक्रम का परीक्षण करता है। एक नेस्टेड IF एक शर्त को दूसरी शर्त के अंदर रखता है, इसलिए आंतरिक परीक्षण तभी चलता है जब बाहरी परीक्षण पहले से ही सत्य हो।

यदि किसी स्थिति का मान NULL है, तो उसे FALSE माना जाता है, इसलिए उसका THEN ब्लॉक छोड़ दिया जाता है। यह तब महत्वपूर्ण होता है जब तुलना किया जाने वाला मान null हो सकता है, क्योंकि शाखा उस तरह से नहीं चलेगी जैसा कि एक नौसिखिया उम्मीद कर सकता है।

जब किसी एक एक्सप्रेशन की तुलना कई निश्चित मानों से की जाती है, तो CASE अधिक स्पष्ट होता है। IF-THEN-ELSIF असंबंधित रेंज स्थितियों के लिए उपयुक्त है। दोनों एक ही तर्क को व्यक्त कर सकते हैं, लेकिन मान मिलान के लिए CASE अधिक पठनीय है।

हाँ। AI नेस्टेड IF स्टेटमेंट को ELSIF चेन या CASE स्टेटमेंट में बदल सकता है और उन स्थितियों का पता लगा सकता है जिन तक कभी नहीं पहुँचा जा सकता। रीराइट का परीक्षण करें, क्योंकि शर्तों को पुनर्व्यवस्थित करने से यह बदल सकता है कि कौन सी शाखा चलेगी।

END IF यह दर्शाता है कि कंडीशनल ब्लॉक कहाँ समाप्त होता है, जो नेस्टेड IF स्टेटमेंट्स के लिए आवश्यक है। इसके बिना, कंपाइलर यह नहीं बता सकता कि कौन से स्टेटमेंट कंडीशन से संबंधित हैं, और यह एक त्रुटि उत्पन्न करता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: