Iterative statements: Loop-End Loop, For-Loop, While Loop, Exit Loop, Continue

Loops આપોઆપ ચાલતાં command ચક્રો તરીકે કામ કરે છે જે code ના blocks ને કાર્યક્ષમ રીતે ત્યાં સુધી દોહરાવે છે જ્યાં સુધી એમની exit conditions એમને અટકવાનું ન કહે.

12 min read · 11 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

આપોઆપ ચાલતું છાપખાનું

કલ્પો કે તમે CampusLib database માટે backend terminal કામગીરી ચલાવી રહ્યા છો. મુખ્ય librarian તમને 50 જુદા students માટે એક personalized ચેતવણીનો સંદેશો છાપવાનું કહે છે જેમનાં પુસ્તકો મોડાં છે. હાથે વધારેલા numbers સાથે એ જ DBMS_OUTPUT.PUT_LINE statement 50 વાર લખવું માત્ર થકવનારું નથી, એ તમારા code ને ફૂલેલો અને તદ્દન કાચો દેખાડે છે. લીટીઓ દોહરાવ્યા વગર દોહરાવાતી database ક્રિયાઓ નિર્દોષ રીતે કરવા, આપણે iterative loops વાપરીએ છીએ. Oracle PL/SQL માં, આ ચક્રો સંભાળવા આપણી પાસે ત્રણ અલગ loop વ્યૂહરચનાઓ છે.

Theory

છતનો પંખો અને Push-Up ની ગણતરી

એક Basic Loop ને પૂરી ઝડપે ચાલતા છતના પંખા જેવો વિચારો; જ્યાં સુધી તમે સ્પષ્ટપણે દીવાલની સ્વિચ (EXIT) ન દબાવો ત્યાં સુધી એ એક અનંત loop માં ફર્યા કરશે. એક WHILE loop એટલે ખુલ્લી છત્રી લઈને બહાર ચાલવું; જ્યાં સુધી વરસાદ પડે છે ત્યાં સુધી તમે ચાલતા રહો છો, પણ જે ક્ષણે વરસાદ અટકે, તમે છત્રી બંધ કરીને અંદર જતા રહો છો. એક FOR loop એટલે તમારી સવારની gym કસરત દરમિયાન બિલકુલ 20 push-ups કરવા; તમે પહેલી rep શરૂ કરો એ પહેલાં જ તમને શરૂઆતની ગણતરી (1) અને અંતિમ લક્ષ્ય (20) બિલકુલ ખબર છે.

Theory

Iteration ના ત્રણ સ્વરૂપો

PL/SQL iterative logic ને ત્રણ પ્રકારમાં વહેંચે છે: Basic Loop (default રીતે અનંત), WHILE Loop (પ્રવેશદ્વારે conditional ચકાસણી), અને FOR Loop (counter થી ચાલતી સીમાઓ). આ blocks કાર્યક્ષમ રીતે સંભાળવા transition keywords પર પૂરું પ્રભુત્વ જોઈએ: EXIT WHEN એક ક્રમમાંથી વહેલું બહાર નીકળે છે, જ્યારે CONTINUE Oracle ને હાલના loop ની બાકીની લીટીઓ છોડીને સીધા આગલા iteration ની ટોચે કૂદવાનું કહે છે.

At a glance

PL/SQL loop configurations નાં સંરચનાત્મક વર્તન અને ગુણધર્મો

Loop નો પ્રકારCondition ની ચોકીCounter નું સંચાલનઆદર્શ Use Case
Basic Loopશરીરની અંદર સ્પષ્ટ EXIT નિયમો દ્વારાહાથે ગોઠવણ જરૂરી (v_counter := v_counter + 1;)જ્યારે loop નાં statements એક નિયમ ચકાસતાં પહેલાં ઓછામાં ઓછું એક વાર ચાલવાં જ જોઈએ
WHILE Loopપ્રવેશદ્વારે execution પહેલાંની તપાસExecution block ની અંદર હાથે ગોઠવણ જરૂરીજ્યારે iterations ની કુલ સંખ્યા એક બહારની અસ્થિર condition પર આધાર રાખતી હોય
FOR Loopપ્રવેશદ્વારે પહેલેથી ગણેલી range ની તપાસઆપોઆપ સંચાલન; index આપોઆપ જાહેર થાય છે અને વધે છેજ્યારે તમને પહેલેથી બિલકુલ નીચલી અને ઉપલી સીમાઓ ખબર હોય

Practical

Tracking Fines and Skipping Holidays across Iterations

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

Copy કરીને Oracle FreeSQL ખોલો
Oracle FreeSQL, Oracle SQL નું મફત online editor છે. Code પહેલા copy થઈ જાય છે: તેને ત્યાં paste કરીને Run કરો.

Follow along

એક FOR Loop નો આંતરિક ક્રમ

  1. 1. આપોઆપ ગોઠવણી Oracle engine FOR loop statement નોંધે છે અને પડદા પાછળ counter variable ને આપોઆપ એક integer તરીકે જાહેર કરે છે.
  2. 2. Range નું Initialization Compiler સીમાઓ તપાસે છે (દા.ત. 1..5). જો નીચલી value ઉપલા લક્ષ્ય કરતાં નાની કે બરાબર હોય, execution અંદર ઊતરે છે.
  3. 3. આપોઆપ પગલું મળતા END LOOP નિશાનને અડતાં, Oracle ગણિતનું પગલું આંતરિક રીતે સંભાળે છે, હાથે code ના સંકેત વગર counter ને 1 થી update કરતાં.
  4. 4. આપોઆપ સંદર્ભ સફાઈ એક વાર index ઉપલી range ની સીમા વટાવે, loop સમાપ્ત થાય છે અને આપોઆપ બનેલો index variable session ની memory માંથી કાયમ માટે ભૂંસાઈ જાય છે.

Quiz

જો તમે એક PL/SQL FOR loop ના શરીરની અંદર loop index variable ને હાથે બદલવાનો કે એને value સોંપવાનો પ્રયાસ કરો (દા.ત. 'loop_idx := loop_idx + 2;' લખવું) તો શું થાય છે?

  1. Statement સફળતાપૂર્વક ચાલે છે અને loop નું પગલું બદલી નાખે છે.
  2. Block ચાલે છે પણ FOR loop ને એક અનંત Basic Loop માં ફેરવી નાખે છે.
  3. Oracle તરત એક compilation error ફેંકે છે કારણ કે એક FOR loop નો counter loop ના શરીરની અંદર સખ્તાઈથી માત્ર વાંચી શકાય એવો variable છે.
  4. Block સફળતાપૂર્વક compile થાય છે પણ runtime પર એ લીટી સંપૂર્ણપણે અવગણે છે.
Show the answer

Oracle તરત એક compilation error ફેંકે છે કારણ કે એક FOR loop નો counter loop ના શરીરની અંદર સખ્તાઈથી માત્ર વાંચી શકાય એવો variable છે.

Oracle PL/SQL માં, એક FOR loop નો loop counter ફક્ત database server દ્વારા સંભાળાય છે અને loop ના execution ના સંદર્ભમાં સખ્તાઈથી માત્ર વાંચી શકાય એવો છે. એની value ને હાથે ફરીથી લખવાનો કે બદલવાનો કોઈ પણ પ્રયાસ એક syntax compilation crash ઊભો કરે છે.

Watch out

REVERSE સીમાનો ફાંદો

જ્યારે તમારે એક FOR loop ને 10 થી ઊલટું ગણીને 1 સુધી લાવવો હોય, તમે સહજપણે FOR i IN 10..1 LOOP લખી બેસો. આ પાકો ફાંદો છે! Oracle સખ્તાઈથી લાગુ કરે છે કે નીચલી સીમા હંમેશા ડાબી બાજુ અને ઉપલી સીમા જમણી બાજુ બેસવી જોઈએ. ઊલટાં ચક્રો ચલાવવા, તમારે FOR i IN REVERSE 1..10 LOOP લખવું પડશે. જો તમે 10..1 લખો, Oracle આંકે છે કે 10 એ 1 થી મોટું છે, સીમાની ચકાસણી નિષ્ફળ કરે છે, અને એક પણ લીટી ચલાવ્યા વગર આખો loop block છોડી દે છે!

Think first

Loop Index Variable ઢંકાવાની કસોટી

માનસિક પડકાર: જો તમે તમારા DECLARE block માં 'v_counter NUMBER := 100;' નામનો એક variable જાહેર કરો, અને પછી 'FOR v_counter IN 1..5 LOOP' તરીકે રચાયેલો એક loop ચલાવો, તો END LOOP statement ની તરત પછી v_counter નો સંદર્ભ લેતાં કઈ value છપાશે? Variable ના scope વિશે વિચારો.

Show the answer

એ 100 છાપશે! FOR loop ની અંદર વપરાયેલો 'v_counter' index એક તદ્દન અલગ આપોઆપ બનેલો variable છે જે કામચલાઉ રીતે તમારા બહારના variable ને ઢાંકી દે છે. એ loop ની શરૂઆતે જન્મે છે અને 'END LOOP;' પર નાશ પામે છે. તેથી, બહારનો variable સંપૂર્ણપણે અછૂતો રહે છે અને એની મૂળ value 100 જાળવી રાખે છે.

Theory

University Lab Exam માં ગુણ મેળવવાની ટેવ

Semester 4 ના database lab નું મૂલ્યાંકન કરતા બહારના examiners ખાસ કરીને તમારા Basic Loops માં એક EXIT condition ની હાજરી તપાસે છે. જો તમે કાગળ પર કે terminal screen પર એક સાદું LOOP-END LOOP માળખું લખો અને એની સાથે એક સ્પષ્ટ EXIT WHEN statement ન જોડો, તો એક ખતરનાક અનંત lockup નું જોખમ ઊભું કરવા બદલ તમે તરત performance ના marks ગુમાવશો.

Summary

Key takeaways

  • Iterative loops બિનજરૂરી code blocks બનાવ્યા વગર દોહરાવાતી કામગીરી સલામત રીતે આપોઆપ કરે છે.
  • Basic Loops સતત ચાલે છે અને execution માંથી બહાર નીકળવા એક સ્પષ્ટ EXIT નિશાન માંગે છે.
  • WHILE Loops અંદરની કોઈ પણ code લીટી process કરતાં પહેલાં શરૂઆતના પ્રવેશદ્વારે conditions આંકે છે.
  • FOR Loops index variables અને range ની સીમાઓ આપોઆપ સંભાળે છે, loop counters ને માત્ર વાંચી શકાય એવા ગણતાં.
  • REVERSE loop ની syntax સખ્તાઈથી નીચલી સીમા પહેલાં માંગે છે, આ રીતે: REVERSE lower..upper.
  • CONTINUE modifier ચાલુ loop ચક્રનો બાકીનો ભાગ છોડીને સીધો આગલા ફેરા પર કૂદે છે.
  • Memory hook: Basic loops ને હાથે સ્વિચ જોઈએ, WHILE પ્રવેશદ્વારે ગાળે છે, અને FOR પોતાના ગિયર જાતે ચલાવે છે!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from PL/SQL and Conditional and Iterative Statements

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Iterative statements: Loop-End Loop, For-Loop, While Loop, Exit Loop, Continue · Concepts of Relational Database Management Systems · Gri-Learn