Theory
Fine-Slab की दुविधा
कल्पना कीजिए एक student CampusLib counter पर एक किताब देर से लौटाता है। database program के तौर पर, आप सबको एक सपाट 20 rupees penalty नहीं लगा सकते। अगर एक किताब 1 से 5 दिन देर से है, fine Rs. 2 प्रति दिन है। अगर यह 6 से 10 दिन देर से है, यह Rs. 5 प्रति दिन तक कूदता है। अगर यह 10 दिन पार करती है, यह Rs. 10 प्रति दिन तक बढ़ता है, और उनका library card तुरंत suspend होना चाहिए। हम अपने database engine को एक variable number of overdue days देखने और समझदारी से सही operational penalty चुनने के लिए कैसे सिखाते हैं?
Theory
Railway Track Diverter
standard SQL queries को एक अकेले सीधे track पर चलती एक bullet train की तरह सोचिए, यह बिना चुनाव किए data के हर block को क्रमिक रूप से मारती है। PL/SQL conditional statements एक व्यस्त railway junction पर एक track switcher की तरह काम करते हैं। एक ख़ास signaling rule के आधार पर (जैसे क्या train एक Express है या एक local?), track dynamically shift होता है, train को एक ख़ास route पर भेजते हुए जबकि वैकल्पिक pathways को पूरी तरह अनदेखा करते हुए।
Theory
Decision Making की Syntax
औपचारिक रूप से, PL/SQL decisions को logical branching structures इस्तेमाल करके सँभालता है। C, C++, या Java के उलट, जो curly braces {} और else if जैसे keywords इस्तेमाल करते हैं, Oracle PL/SQL THEN, ELSIF जैसे साफ़, स्पष्ट keywords पर निर्भर करता है, और पूरी condition architecture को एक निश्चित END IF; statement इस्तेमाल करके समाप्त करता है। हर conditional check एक expression को TRUE, FALSE, या NULL में evaluate करता है, code execution को तदनुसार route करते हुए।
At a glance
Oracle PL/SQL में उपलब्ध मूल conditional architectures।
| Structure Type | Keyword Layout | Evaluation Rule | Best Used For |
|---|---|---|---|
| Single Choice | IF ... THEN ... END IF; | inner logic केवल तब execute करता है जब condition TRUE evaluate हो। | एक minor warning flag set करने जैसी optional कार्रवाइयाँ लेना। |
| Binary Choice | IF ... THEN ... ELSE ... END IF; | TRUE होने पर path A चलाता है; FALSE या NULL होने पर path B पर गिरता है। | Pass/Fail या Paid/Unpaid जैसे yes/no scenarios सँभालना। |
| Multi-Tier Slabs | IF ... THEN ... ELSIF ... ELSE ... END IF; | कई expressions को ऊपर से नीचे क्रमिक रूप से evaluate करता है। | tiered pricing systems या academic grade calculators बनाना। |
| Value Matching | CASE ... WHEN ... THEN ... END CASE; | एक अकेले expression को fixed target options के ख़िलाफ़ तुलना करता है। | exact code choices जाँचते समय लंबी ELSIF chains की जगह लेना। |
Practical
एक Multi-Tier Library Fine Calculator बनाना
-- An anonymous block to determine per-day fine rates and account lockdowns
DECLARE
v_overdue_days NUMBER := 12;
v_fine_per_day NUMBER;
v_total_fine NUMBER;
v_card_status VARCHAR2(20);
BEGIN
-- Multi-tier structural evaluation
IF v_overdue_days <= 5 THEN
v_fine_per_day := 2;
v_card_status := 'Active';
ELSIF v_overdue_days <= 10 THEN
v_fine_per_day := 5;
v_card_status := 'Active';
ELSE
v_fine_per_day := 10;
v_card_status := 'Suspended';
END IF;
-- Final mathematical calculation
v_total_fine := v_overdue_days * v_fine_per_day;
DBMS_OUTPUT.PUT_LINE('Account Status: ' || v_card_status);
DBMS_OUTPUT.PUT_LINE('Total Fine Payable: Rs. ' || v_total_fine);
END;
/Follow along
एक Conditional Branch के पर्दे के पीछे
- 1. Condition Trigger engine सबसे ऊपर की condition expression (v_overdue_days <= 5) का आकलन करता है। चूँकि 12, 5 से बड़ा है, यह FALSE evaluate होती है।
- 2. Sequential Drop engine पहला block bypass करता है और अगला operational gate जाँचता है: ELSIF (v_overdue_days <= 10)। यह भी FALSE evaluate होती है।
- 3. Default Catchall सारी सूचीबद्ध conditions ख़त्म कर लेने के बाद, compiler सीधे ELSE chamber में गिरता है, suspension और Rs. 10 assignment variables execute करते हुए।
- 4. Route Exit compiler END IF; marker से टकराता है, branching ecosystem को तुरंत बंद करता है और बचे standard equations को line में नीचे execute करने के लिए आगे बढ़ता है।
Quiz
एक exam सवाल आपसे एक multi-conditional check block लिखने को कहता है। alternative conditional branches के लिए Oracle PL/SQL में कौन सी keyword spelling सफलतापूर्वक compile होगी?
- ELSEIF
- ELS_IF
- ELSIF
- ELSE IF
Show the answer
ELSIF
यह एक परम जाल है जो external university examiners students को पकड़ने के लिए इस्तेमाल करना पसंद करते हैं! अधिकांश programming languages के उलट जो 'else if' या 'elseif' लिखती हैं, Oracle PL/SQL सख़्ती से compressed keyword 'ELSIF' लागू करता है ('ELSE' में 'E' छोड़ते हुए)। कोई भी अन्य spelling एक तुरंत syntax failure trigger करती है।
Watch out
NULL Conditions का Silent ख़तरा
PL/SQL में, अगर एक condition एक uninitialized variable से टकराती है (जो NULL पर default होता है), यह crash नहीं होती। बजाय इसके, logical comparison एक neutral state में resolve होती है जो न TRUE है न FALSE। Oracle इसे एक failure के रूप में treat करता है और block को पार करके फिसल जाता है। अगर आप IS NULL इस्तेमाल करके NULL states के लिए स्पष्ट रूप से filter नहीं करते, आपके records सीधे default ELSE block में गिरेंगे, जो विशाल logical calculation errors पैदा कर सकता है!
Think first
Architectural Decision Test
अगर आपको जाँचना है कि क्या एक student 'BCA' department से संबंधित है और जाँचना है कि क्या उनका membership year '3rd Year' है ताकि एक graduation fee discount दें, आपको एक अकेला CASE statement इस्तेमाल करना चाहिए या एक Nested IF structure? tap करने से पहले multi-variable testing के बारे में सोचिए।
Show the answer
यहाँ एक Nested IF structure बहुत बेहतर है! CASE statements एक अकेले variable को static, discrete values की एक list के ख़िलाफ़ मिलाने में उत्कृष्ट हैं (जैसे जाँचना कि क्या Department 'BCA', 'BBA', या 'BTech' है)। जब आपको एक साथ कई पूरी तरह अलग variables में अलग, जटिल logical combinations evaluate करने हों, एक 'IF' statement को दूसरे के अंदर nest करना साफ़ और सुरक्षित control logic देता है।
Theory
Lab Exam Execution रणनीति
terminal laboratory examinations के दौरान PL/SQL code लिखते समय, मेल खाते semi-colons कभी मत भूलिए। जबकि IF, THEN, और ELSE standalone clauses हैं और punctuation नहीं लेते, termination block को सख़्ती से एक terminating semi-colon चाहिए जो बिल्कुल END IF; लिखा हो। इस छोटे character को छोड़ना पूरे Oracle compiler parser को बिगाड़ देगा और एक वरना perfect script बर्बाद कर देगा।
Summary
Key takeaways
- Conditional blocks boolean validation rules के आधार पर ख़ास program logic अलग और execute करते हैं।
- किसी भी decision loop structure के लिए ज़रूरी closing marker एक स्पष्ट 'END IF;' है।
- सीधी compilation failures रोकने के लिए अनोखी keyword spelling 'ELSIF' का ध्यान रखिए।
- CASE statements single-variable matches के लिए लंबी ELSIF chains का एक साफ़, सुंदर विकल्प देते हैं।
- Uninitialized variables NULL पर resolve होते हैं, comparisons को चुपचाप विफल करते और सीधे logic path में गिराते हुए।
- Memory hook: अगर यह मेल खाए, THEN मारो; अगर आपको एक और check चाहिए, इसे ELSIF spell करो; route को END IF से ख़त्म करो!