Oracle PL/SQL FOR LOOP met voorbeeld

⚡ Slimme samenvatting

Oracle Een PL/SQL FOR-lus voert een codeblok een bekend aantal keren uit tussen een onder- en bovengrens. De lusvariabele wordt impliciet gedeclareerd en verhoogt zichzelf, waardoor een handmatige teller niet nodig is. Het trefwoord REVERSE zorgt ervoor dat de lus naar beneden telt.

  • 🔢 Beste voor: Een FOR-lus is geschikt voor een bekend aantal iteraties in plaats van een open einde.
  • 📏 Bereik: Een onder- en bovengrens bepalen hoe vaak de lus wordt uitgevoerd.
  • ⚙️ Impliciete teller: De lusvariabele wordt automatisch gedeclareerd en wordt vanzelf verhoogd.
  • 🎯 Domein: De lusvariabele bestaat alleen binnen de lus.
  • 🔄 ACHTERUIT: Door REVERSE voor de ondergrens te plaatsen, telt de lus af.
  • 🪜 Genesteld: Lussen kunnen in elkaar genesteld worden, waarbij de binnenste lus volledig wordt uitgevoerd voor elke iteratie van de buitenste lus.
  • 🚪 Automatisch afsluiten: De lus eindigt automatisch wanneer de variabele buiten het bereik valt.

Oracle PL/SQL For-lus

Wat is een FOR-lus?

De "FOR-lus" is het meest geschikt wanneer je code een bekend aantal keren wilt uitvoeren, in plaats van op basis van een andere voorwaarde.

In deze lus worden een ondergrens en een bovengrens gespecificeerd, en zolang de lusvariabele zich binnen dit bereik bevindt, wordt de lus uitgevoerd.

De lusvariabele is zelfverhogend, dus er is geen expliciete verhogingsbewerking nodig. De lusvariabele hoeft niet te worden gedeclareerd, omdat deze impliciet wordt gedeclareerd.

FOR <loop_variable> in <lower_limit> .. <higher_limit>
LOOP
<execution block starts>
.
.
.
<execution_block_ends>
END LOOP;

Syntaxis uitleg:

  • Het sleutelwoord 'FOR' markeert het begin van de lus en 'END LOOP' markeert het einde.
  • De lusvariabele wordt elke keer gecontroleerd voordat het uitvoeringsgedeelte wordt uitgevoerd.
  • Het uitvoeringsblok bevat alle code die moet worden uitgevoerd en kan elke uitvoerbare instructie bevatten.
  • De loop_variable wordt impliciet gedeclareerd tijdens de uitvoering van de lus en heeft alleen bereik binnen de lus.
  • Als de lusvariabele buiten het bereik komt, wordt de lus verlaten.
  • De lus kan in omgekeerde volgorde werken door het trefwoord 'REVERSE' vóór de lower_limit toe te voegen.

Voorbeeld 1: In dit voorbeeld printen we de getallen van 1 tot en met 5 met behulp van een FOR-lus.

FOR-lus die de getallen 1 tot en met 5 afdrukt.

BEGIN
dbms_output.put_line('Program started.');
FOR a IN 1 .. 5
LOOP
dbms_output.put_line(a);
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Uitleg:

  • Code lijn 2: De melding "Programma gestart" wordt afgedrukt.
  • Code lijn 3: Het sleutelwoord 'FOR' markeert het begin van de lus en de lusvariabele 'a' wordt gedeclareerd. Deze neemt nu waarden aan van 1 tot en met 5.
  • Code lijn 5: Drukt de waarde van 'a' af.
  • Code lijn 6: Het trefwoord 'END LOOP' markeert het einde van het uitvoeringsblok.
  • Regel 5 wordt uitgevoerd totdat 'a' de waarde 6 bereikt, waarna de voorwaarde niet meer geldt en de lus wordt verlaten.
  • Code lijn 7: Het bericht "Programma voltooid" afdrukken.

Geneste lussen

Lusinstructies kunnen ook genest worden. De buitenste en binnenste lussen kunnen van verschillende typen zijn. In een geneste lus wordt de binnenste lus volledig uitgevoerd bij elke iteratie van de buitenste lus.

Geneste lusstructuur

LOOP --outer
<execution block starts>
LOOP --inner
<execution_part>
END LOOP;
<execution_block_ends>
END LOOP;

Syntaxis uitleg:

  • De buitenste lus heeft nog een lus aan de binnenkant.
  • De lussen kunnen van elk type zijn, en de uitvoeringsfunctionaliteit is hetzelfde.

Voorbeeld 1: In dit voorbeeld printen we de getallen van 1 tot en met 3 met behulp van een FOR-lus. Elk getal wordt even vaak afgedrukt als de waarde ervan.

Voorbeeld van een geneste FOR-lus, deel 1

Voorbeeld van een geneste FOR-lus, deel 2

DECLARE
b NUMBER;
BEGIN
dbms_output.put_line('Program started');
FOR a IN 1..3
LOOP
b:= 1;
WHILE (a>=b)
LOOP
dbms_output.put_line(a);
b:= b+1;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed');
END;
/

Code Uitleg:

  • Code lijn 2: De variabele 'b' declareren als gegevenstype 'NUMBER'.
  • Code lijn 4: De melding "Programma gestart" wordt afgedrukt.
  • Code lijn 5: Het sleutelwoord 'FOR' markeert het begin van de lus en de lusvariabele 'a' wordt gedeclareerd. Deze neemt nu waarden aan van 1 tot en met 3.
  • Code lijn 7: Elke keer de waarde van 'b' opnieuw instellen op '1'.
  • Code lijn 8: Het innerlijk herhalingslus controleert op de voorwaarde a>=b.
  • Code lijn 10: Drukt de waarde van 'a' af, zolang aan de bovenstaande voorwaarde wordt voldaan.
  • Code lijn 14: Het bericht "Programma voltooid" afdrukken.

FOR-lus en omgekeerde FOR-lus

Standaard telt een FOR-lus van onder naar boven, vanaf de ondergrens. Door het sleutelwoord REVERSE toe te voegen, telt de lus omlaag, terwijl de bovengrens behouden blijft.ping De limieten staan ​​in dezelfde volgorde. Beide vormen worden hieronder naast elkaar weergegeven, zodat het verschil duidelijk is.

Form Voorvoegsel Volgorde van waarden
Oplopend VOOR een IN 1 .. 5 1, 2, 3, 4, 5
Aflopend VOOR een IN OMGEKEERDE 1 .. 5 5, 4, 3, 2, 1

Merk op dat zelfs bij REVERSE de ondergrens nog steeds vóór de bovengrens wordt geschreven; alleen de iteratierichting verandert. Voor lussen waarvan het aantal iteraties niet van tevoren bekend is, geldt het volgende: basislus is de betere keuze.

Veelgestelde vragen

Nee. De FOR-lus declareert zijn variabele impliciet, en deze bestaat alleen binnen de lus. Het declareren van een variabele met dezelfde naam buiten de lus heeft geen invloed op de variabele die door de lus wordt gebruikt.

Met REVERSE wordt de lus van de bovengrens naar de ondergrens doorlopen. De grenzen worden nog steeds van laag naar hoog weergegeven; alleen de volgorde waarin de waarden worden bezocht, is omgekeerd.

Gebruik een FOR-lus wanneer het aantal iteraties van tevoren bekend is, bijvoorbeeld binnen een vast bereik. Gebruik een WHILE-lus wanneer de lus moet doorgaan zolang aan een voorwaarde wordt voldaan en het aantal iteraties niet vaststaat.

Ja, als de basislus simpelweg telt tussen twee vaste waarden. AI kan de handmatige teller en EXIT vervangen door een FOR-bereik, waardoor de code korter wordt. Controleer of de grenzen overeenkomen met het origineel.

Nee. De lusvariabele is alleen-lezen binnen de lus, dus een toewijzing eraan leidt tot een compilatiefout. Om de programmalogica te wijzigen, gebruik je een aparte variabele of verlaat je de lus met EXIT.

Vat dit bericht samen met: