Theory
Automated Printing Press
कल्पना कीजिए आप CampusLib database के लिए backend terminal operations चला रहे हैं। head librarian आपसे 50 अलग students के लिए एक personalized warning message print करने को कहती है जिनके पास overdue books हैं। वही DBMS_OUTPUT.PUT_LINE statement हाथ से बढ़ाए numbers के साथ 50 बार लिखना सिर्फ़ थकाऊ नहीं, यह आपके code को bloated और पूरी तरह amateurish बनाता है। lines दोहराए बिना repetitive database actions निर्दोष रूप से करने के लिए, हम iterative loops इस्तेमाल करते हैं। Oracle PL/SQL में, इन cycles को सँभालने के लिए हमारे पास तीन अलग loop strategies हैं।
Theory
Ceiling Fan और Push-Up Count
एक Basic Loop को पूरी speed पर चलते एक ceiling fan की तरह सोचिए; यह एक infinite loop में हमेशा घूमता रहेगा जब तक आप स्पष्ट रूप से wall switch (EXIT) न मारें। एक WHILE loop एक खुले umbrella के साथ बाहर चलने जैसा है; आप जब तक बारिश गिर रही है तब तक चलते रहते हैं, पर जिस पल बौछार रुकती है, आप frame बंद करते और अंदर क़दम रखते हैं। एक FOR loop अपने सुबह के gym workout के दौरान बिल्कुल 20 push-ups करने जैसा है; आप पहला rep शुरू करने से पहले ही बिल्कुल starting count (1) और बिल्कुल ending target (20) जानते हैं।
Theory
Iteration के तीन रूप
PL/SQL iterative logic को तीन स्वादों में बाँटता है: Basic Loop (default रूप से infinite), WHILE Loop (entry gate पर conditional validation), और FOR Loop (counter-driven boundaries)। इन blocks को कुशलता से manage करने के लिए transition keywords पर पूर्ण महारत चाहिए: EXIT WHEN एक sequence से जल्दी बाहर निकलता है, जबकि CONTINUE Oracle को मौजूदा loop की बची lines skip करने और सीधे अगली iteration के ऊपर कूदने को कहता है।
At a glance
PL/SQL loop configurations के संरचनात्मक behaviors और गुण।
| Loop Type | Condition Checkpoint | Counter Management | Ideal Use Case |
|---|---|---|---|
| Basic Loop | स्पष्ट EXIT rules के ज़रिए body के अंदर | मैनुअल adjustment ज़रूरी (v_counter := v_counter + 1;) | जब loop statements एक rule test करने से पहले कम से कम एक बार execute होने चाहिए |
| WHILE Loop | entry gate पर Pre-execution check | execution block के अंदर मैनुअल adjustment ज़रूरी | जब iterations की कुल संख्या एक external volatile condition पर निर्भर हो |
| FOR Loop | entry gate पर Pre-calculated range check | Automatic management; index अंतर्निहित रूप से declared और incremented होता है | जब आप पहले से बिल्कुल lower और upper boundaries जानते हैं |
Practical
Fines Track करना और Iterations में Holidays Skip करना
-- An anonymous block comparing a Basic Loop and a counter-driven FOR Loop
DECLARE
v_basic_counter NUMBER := 1;
v_total_fine NUMBER := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE('--- 1. Processing via Basic Loop ---');
LOOP
v_total_fine := v_total_fine + 5;
DBMS_OUTPUT.PUT_LINE('Day ' || v_basic_counter || ' Fine: Rs. ' || v_total_fine);
v_basic_counter := v_basic_counter + 1;
-- Mandatory exit guard to prevent system freeze
EXIT WHEN v_basic_counter > 5;
END LOOP;
DBMS_OUTPUT.PUT_LINE('--- 2. Processing via Counter-Driven FOR Loop ---');
-- Note: loop_idx does NOT need to be declared in the DECLARE section!
FOR loop_idx IN 1..5 LOOP
-- Using CONTINUE to skip an entry point dynamically
IF loop_idx = 3 THEN
DBMS_OUTPUT.PUT_LINE('Day 3 is a College Holiday! Skipping generation.');
CONTINUE;
END IF;
DBMS_OUTPUT.PUT_LINE('Day ' || loop_idx || ' automated ledger entry processed.');
END LOOP;
END;
/Follow along
एक FOR Loop का Internal Sequence
- 1. Implicit Setup Oracle engine FOR loop statement register करता है और counter variable को अंतर्निहित रूप से एक integer के रूप में पर्दे के पीछे अपने-आप declare करता है।
- 2. Range Initialization compiler boundaries जाँचता है (जैसे 1..5)। अगर lower value, upper target से कम या बराबर है, execution अंदर गिरता है।
- 3. Automated Stepping मेल खाते END LOOP marker से टकराने पर, Oracle arithmetic step internally सँभालता है, counter को मैनुअल code prompts के बिना 1 से update करते हुए।
- 4. Automated Context Purge एक बार index upper range boundary पार करता है, loop समाप्त होता है और implicit index variable स्थायी रूप से session memory से मिटा दिया जाता है।
Quiz
क्या होता है अगर आप एक PL/SQL FOR loop के body के अंदर loop index variable को हाथ से modify या एक value assign करने की कोशिश करते हैं (जैसे 'loop_idx := loop_idx + 2;' लिखना)?
- statement सफलतापूर्वक execute होती है और loop का stride step बदलती है।
- block चलता है पर FOR loop को एक infinite Basic Loop में बदल देता है।
- Oracle एक तुरंत compilation error फेंकता है क्योंकि एक FOR loop counter loop body के अंदर सख़्ती से एक read-only variable है।
- block सफलतापूर्वक compile होता है पर runtime पर line को पूरी तरह अनदेखा करता है।
Show the answer
Oracle एक तुरंत compilation error फेंकता है क्योंकि एक FOR loop counter loop body के अंदर सख़्ती से एक read-only variable है।
Oracle PL/SQL में, एक FOR loop का loop counter विशेष रूप से database server द्वारा manage होता है और loop के execution context के भीतर सख़्ती से read-only है। इसके value को हाथ से overwrite या बदलने की कोई भी कोशिश एक syntax compilation crash trigger करती है।
Watch out
REVERSE Boundary जाल
जब आप एक FOR loop को 10 से नीचे 1 तक उल्टा गिनने देना चाहते हैं, आप सहज रूप से FOR i IN 10..1 LOOP लिख सकते हैं। यह एक परम जाल है! Oracle सख़्ती से लागू करता है कि lower bound हमेशा बाईं ओर बैठे और upper bound दाईं ओर। reverse cycles चलाने के लिए, आपको FOR i IN REVERSE 1..10 LOOP लिखना होगा। अगर आप 10..1 लिखते हैं, Oracle मूल्यांकन करता है कि 10, 1 से बड़ा है, boundary validation में विफल होता है, और एक भी line execute किए बिना पूरा loop block skip कर देता है!
Think first
Loop Index Variable Masking Test
Mental Challenge: अगर आप अपने DECLARE block में 'v_counter NUMBER := 100;' नामक एक variable declare करते हैं, और फिर 'FOR v_counter IN 1..5 LOOP' के रूप में संरचित एक loop execute करते हैं, END LOOP statement के तुरंत बाद v_counter reference करने पर कौन सा value print होगा? variable scope के बारे में सोचिए।
Show the answer
यह 100 print करेगा! FOR loop के अंदर इस्तेमाल किया 'v_counter' index एक पूरी तरह अलग implicit variable है जो अस्थायी रूप से आपके outer variable को mask करता है। यह loop की शुरुआत में जन्म लेता है और 'END LOOP;' पर नष्ट होता है। इसलिए, outer variable पूरी तरह अछूता रहता है और अपना original value 100 सुरक्षित रखता है।
Theory
University Lab Exam Scoring आदत
Semester 4 database lab evaluation grade करते External examiners अक्सर आपके Basic Loops को ख़ास तौर पर एक EXIT condition की मौजूदगी के लिए जाँचते हैं। अगर आप कागज़ या एक terminal screen पर एक basic LOOP-END LOOP structure लिखते हैं बिना इसे एक स्पष्ट EXIT WHEN statement के साथ जोड़े, आप एक दुर्भावनापूर्ण infinite lockup risk पेश करने के लिए तुरंत performance marks खो देंगे।
Summary
Key takeaways
- Iterative loops redundant code blocks बनाए बिना repetitive operations सुरक्षित रूप से automate करते हैं।
- Basic Loops लगातार चलते हैं और execution से बाहर निकलने के लिए एक स्पष्ट EXIT marker चाहिए।
- WHILE Loops किसी भी internal code lines process करने से पहले initial entry gate पर conditions का आकलन करते हैं।
- FOR Loops अपने-आप index variables और range bounds manage करते हैं, loop counters को read-only मानते हुए।
- REVERSE loop syntax को सख़्ती से lower bound पहले सूचीबद्ध चाहिए, इस तरह: REVERSE lower..upper।
- CONTINUE modifier सीधे अगली pass पर कूदने के लिए सक्रिय loop cycle के बाक़ी को bypass करता है।
- Memory hook: Basic loops को एक मैनुअल switch चाहिए, WHILE entry gate filter करता है, और FOR अपने gears ख़ुद चलाता है!