Theory
दोहराए ticket updates को स्वचालित करना
कल्पना कीजिए TicketDesk पर आपके manager चाहते हैं आप एक कतार में 10 pending tickets के लिए एक automated alert message print करें। क्या आप अपने script में DBMS_OUTPUT.PUT_LINE statement 10 अलग बार हाथ से लिखेंगे? क्या हो अगर कल 1000 tickets हों? आपका code विशाल और बेक़ाबू हो जाएगा। आपको एक structural औज़ार चाहिए जो code का एक अकेला block बार-बार execute कर सके जबकि अपने-आप हिसाब रखे कि सँभालने को कितने records बचे हैं।
Theory
Supermarket Scanner
एक supermarket पर एक billing counter के बारे में सोचिए। cashier आपकी shopping basket में हर item के लिए एक बिल्कुल नया computer program boot नहीं करता। इसके बजाय, वे एक सरल process चलाते हैं: एक item पकड़ो, इसे optical scanner के आर-पार गुज़ारो, और कुल price में जोड़ो। वे इस बिल्कुल action loop को बार-बार दोहराते हैं। जब basket पूरी तरह ख़ाली हो जाती है, loop अपने-आप टूटता है और वे आपका bill अंतिम रूप देते हैं।
Theory
Oracle Dialect में Iterative Statements
Oracle PL/SQL में, iterative statements control mechanisms हैं जो code statements के एक sequence को कई बार execute करते हैं। PL/SQL तीन मुख्य loop किस्में देता है: basic loop (LOOP ... END LOOP), conditional WHILE loop, और counter-driven FOR loop। इस दोहराव को महीन तरीक़े से समायोजित करने के लिए, आप loop controls इस्तेमाल करते हैं: एक loop से तुरंत बाहर निकलने के लिए EXIT या EXIT WHEN, और मौजूदा iteration में बचा code छोड़कर सीधे अगले cycle पर कूदने के लिए CONTINUE या CONTINUE WHEN।
At a glance
तीन मुख्य Oracle PL/SQL iteration types के operational profiles
| Loop Structure | Condition कब जाँची जाती है | Best Use Case |
|---|---|---|
| Basic Loop | body के अंदर explicit EXIT WHEN के ज़रिए | जब loop body कम से कम एक बार चलनी चाहिए |
| WHILE Loop | loop में घुसने से पहले शीर्ष पर | जब दोहराना एक बदलती condition पर निर्भर करता है |
| FOR Loop | एक निश्चित index range के लिए शीर्ष पर | जब आप पहले से बिल्कुल iteration count जानते हैं |
Practical
Loops इस्तेमाल करके Tickets का एक Batch Process करना
-- Enable text rendering in the Oracle engine
SET SERVEROUTPUT ON;
DECLARE
v_counter NUMBER := 1;
v_max_tickets NUMBER := 3;
BEGIN
DBMS_OUTPUT.PUT_LINE('=== Starting Basic Loop ===');
LOOP
DBMS_OUTPUT.PUT_LINE('Processing Ticket ID: ' || v_counter);
v_counter := v_counter + 1;
-- Explicit exit condition safely stops the execution
EXIT WHEN v_counter > v_max_tickets;
END LOOP;
DBMS_OUTPUT.PUT_LINE('=== Starting FOR Loop Control ===');
-- The loop index variable i is implicitly declared here
FOR i IN 1..3 LOOP
IF i = 2 THEN
-- Skip processing for ticket 2 and proceed to next index
CONTINUE;
END IF;
DBMS_OUTPUT.PUT_LINE('Handling Priority Index: ' || i);
END LOOP;
END;
/Quiz
एक Oracle PL/SQL FOR loop statement के अंदर एक निश्चित numeric range परिभाषित करने के लिए सही syntax क्या है?
- FOR i IN 1 TO 10 LOOP
- FOR i IN 1..10 LOOP
- FOR i = 1 TO 10 LOOP
- FOR i IN 1...10 LOOP
Show the answer
FOR i IN 1..10 LOOP
Oracle PL/SQL एक FOR loop के अंदर दो integers के बीच एक समावेशी range दर्शाने के लिए एक double period operator (..) इस्तेमाल करता है। TO या equal signs जैसे keywords इस language dialect में अमान्य loop constraints हैं और आपकी lab exam के दौरान एक तुरंत compilation failure trigger करेंगे।
Think first
Mental Challenge: Execution का अंतर
क्या होता है अगर एक WHILE loop condition अपनी बिल्कुल पहली जाँच पर FALSE evaluate होती है? क्या loop body बिल्कुल execute होती है? tap करने से पहले execution रास्ता मन में समझिए।
Show the answer
loop body एक बार भी execute नहीं होगी! एक WHILE loop engine को अंदर आने देने से पहले अपनी entry condition बिल्कुल शीर्ष पर evaluate करती है। अगर statement तुरंत false evaluate होता है, engine पूरी तरह END LOOP statement को छोड़ देता है, सीधे बाद के program logic पर कूदते हुए।
Watch out
भयानक Infinite Loop दुःस्वप्न
lab practicals में BCA students द्वारा की गई सबसे बार-बार होने वाली error एक basic LOOP के अंदर loop counter बढ़ाना भूलना है। अगर आप v_counter := v_counter + 1; छोड़ देते हैं, आपका counter हमेशा के लिए अपने शुरुआती value पर अटका रहता है। क्योंकि आपका EXIT WHEN clause कभी true नहीं हो सकता, database engine एक अनंत cycle process करने में अहम memory खपाएगा जब तक terminal lock न हो जाए या server पूरी तरह crash न हो जाए।
Theory
Cursor Navigation और भविष्य के Sync Routines
production enterprise environments में, loops को live table records की rows के बीच dynamically चलने के लिए सीधे cursors के साथ जोड़ा जाता है। आप इस pattern का अगले semester अपने Sem 3 SQLite mobile database sync routines में व्यापक इस्तेमाल करेंगे, जहाँ आप smartphone diagnostic signals जाँचने और local logs को central backend master server तक एक बार में एक record भेजने के लिए एक loop program करेंगे।
Summary
Key takeaways
- Basic loops एक explicit exit condition statement द्वारा रोके जाने तक अनिश्चित काल तक चलते हैं।
- WHILE loops कोई block statements execute करने से पहले entry boundary पर conditions जाँचते हैं।
- FOR loops एक implicitly declared numerical index इस्तेमाल करके range प्रगति सुरक्षित रूप से स्वचालित करते हैं।
- EXIT keyword loop execution पूरी तरह समाप्त करता है और block boundary के परे कूदता है।
- CONTINUE modifier मौजूदा loop cycle को दरकिनार करता है ताकि बाद की iteration सीधे शुरू हो।
- Memory hook: दोहराने को Loop, पूरा करने को exit, dot-dot से गिनो, continue से छोड़ो!