Oracle PL/SQL LOOP met voorbeeld
โก Slimme samenvatting
PL/SQL-lussen voeren een stuk code herhaaldelijk uit, een gewenst aantal keren. PL/SQL biedt basislussen, FOR-lussen en WHILE-lussen, die worden aangestuurd door CONTINUE, EXIT, EXIT WHEN en GOTO. Lussen kunnen van labels worden voorzien om geneste structuren overzichtelijk te beheren.

Wat zijn lussen?
Lussen zorgen ervoor dat een bepaald deel van de code in een programma een gewenst aantal keren wordt uitgevoerd. In deze tutorial bekijken we het lusconcept in PL/SQL en de controlestroom binnen lussen.
Inleiding tot het Loops-concept
Het concept van lussen biedt de volgende voordelen bij het programmeren:
- Herbruikbaarheid van code.
- Verkleinde codeomvang.
- Eenvoudige bediening.
- Verminderde complexiteit.
Het onderstaande diagram toont het toilet.ping concept.
In het bovenstaande diagram wordt de lusvoorwaarde gecontroleerd, en zolang daaraan voldaan is, wordt het uitvoeringsblok uitgevoerd.
In elke iteratie verandert de teller die de lusvoorwaarde bepaalt, zodat de besturing de lus kan verlaten. In sommige gevallen wordt deze teller verhoogd of verlaagd met een vooraf gedefinieerd aantal, en in andere gevallen is het een zoekvoorwaarde die het codeblok blijft uitvoeren totdat eraan is voldaan.
Verklaringen voor lusregeling
Voordat je het concept van lussen leert, is het belangrijk om de besturingsinstructies voor lussen te leren kennen. Deze instructies bepalen de uitvoeringsstroom binnen een lus.
VERDER
Dit trefwoord instrueert de PL/SQL-engine dat, wanneer het CONTINUE binnen een lus tegenkomt, de resterende code in het uitvoeringsblok wordt overgeslagen en de volgende iteratie direct wordt gestart. Dit wordt voornamelijk gebruikt wanneer de code binnen de lus voor bepaalde iteratiewaarden moet worden overgeslagen.
VERLATEN / VERLATEN WANNEER
Dit trefwoord geeft de PL/SQL-engine de opdracht om de huidige lus onmiddellijk te verlaten. In een geneste lus zorgt 'EXIT' in de binnenste lus ervoor dat alleen de binnenste lus wordt verlaten, niet de buitenste. 'EXIT WHEN' wordt gevolgd door een expressie die een Booleaanse waarde oplevert; als de waarde WAAR is, wordt de uitvoering beรซindigd.
GOTO
Deze instructie draagt โโde controle over aan een gelabelde instructie (โGOTO ;โ). De volgende beperkingen zijn van toepassing:
- De besturingsoverdracht kan alleen binnen de subprogramma's plaatsvinden.
- De controle kan niet worden overgedragen van het gedeelte voor foutafhandeling naar het uitvoeringsgedeelte.
Het gebruik van deze verklaring wordt afgeraden, tenzij er geen alternatief is, omdat de code-control tracDe haalbaarheid wordt erg moeilijk wanneer de controle van het ene onderdeel naar het andere wordt overgedragen.
Soorten lus in PL/SQL
PL / SQL biedt de volgende drie soorten lussen:
- Basislusverklaring
- Voor lusinstructie
- While-lus-instructie
De onderstaande tabel vergelijkt de drie voordat de basislus in detail wordt besproken.
| Ringleiding | Uitgangscriteria | Het beste te gebruiken wanneer |
|---|---|---|
| Basislus | Expliciete EXIT in het blok | De exit is niet gebaseerd op een vast aantal of een vaste voorwaarde. |
| For loop | De teller bereikt het einde van zijn bereik. | Het aantal iteraties is van tevoren bekend. |
| WHILE-lus | De voorwaarde wordt onjuist. | De lus moet blijven draaien zolang aan een bepaalde voorwaarde is voldaan. |
Basislusverklaring
Dit is de eenvoudigste lusstructuur in PL/SQL. Het uitvoeringsblok begint met het trefwoord 'LOOP' en eindigt met 'END LOOP'. De exitvoorwaarde moet binnen het uitvoeringsblok worden opgegeven, zodat de lus wordt verlaten. Het trefwoord EXIT moet expliciet worden gebruikt.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Syntaxis uitleg:
- Het trefwoord 'LOOP' markeert het begin van de lus en 'END LOOP' markeert het einde.
- Het uitvoeringsblok bevat alle code die moet worden uitgevoerd, inclusief de EXIT-voorwaarde.
- Het uitvoeringsgedeelte kan elke uitvoerbare instructie bevatten.
Let op: Een eenvoudige lus zonder het trefwoord EXIT resulteert in een oneindige lus die nooit stopt.
Voorbeeld 1: In dit voorbeeld printen we de getallen van 1 tot en met 5 met behulp van een eenvoudige lus.
DECLARE a NUMBER:= 1; BEGIN dbms_output.put_line('Program started.'); LOOP dbms_output.put_line(a); a:= a+1; EXIT WHEN a>5; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Uitleg:
- Code lijn 2: De variabele 'a' declareren als 'NUMBER' en initialiseren met de waarde '1'.
- Code lijn 4: De melding "Programma gestart" wordt afgedrukt.
- Code lijn 5: Het sleutelwoord 'LOOP' markeert het begin van de lus.
- Code lijn 6: Drukt de waarde van 'a' af.
- Code lijn 7: Verhoogt de waarde van 'a' met 1.
- Code lijn 8: Controleert of de waarde van 'a' groter is dan 5.
- Code lijn 9: Het trefwoord 'END LOOP' markeert het einde van het uitvoeringsblok.
- Regels 6 tot en met 8 worden uitgevoerd totdat 'a' de waarde 6 bereikt, waarna de voorwaarde WAAR wordt en de lus wordt verlaten.
- Code lijn 10: Het bericht "Programma voltooid" afdrukken.
Etikettering van lussen
In PL/SQL kunnen lussen van een label worden voorzien. Het label moet tussen "<<" en ">>" staan. Het labelen van lussen, met name geneste lussen, verbetert de leesbaarheid. Het label kan worden meegegeven in een EXIT-opdracht om die specifieke lus te verlaten. Zo kan de besturing de buitenste lus van een geneste structuur direct verlaten door de EXIT-opdracht gevolgd door het label van de buitenste lus te geven.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <execution_block_ends> END LOOP;
Syntaxis uitleg:
- De buitenste lus heeft nog een lus aan de binnenkant.
- '< >' en '< '>' zijn de labels van deze lussen.
Voorbeeld 1: In dit voorbeeld printen we getallen vanaf 1 met behulp van een eenvoudige lus. Elk getal wordt zo vaak afgedrukt als de waarde ervan. De bovengrens van de reeks is vastgelegd in de declaratie. We gebruiken hiervoor het labelconcept.
DECLARE a NUMBER:= 0; b NUMBER; upper_limit NUMBER := 4; BEGIN dbms_output.put_line('Program started.'); <<outer_loop>> LOOP a:= a+1; b:= 1; <<inner_loop>> LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:= b+1; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Uitleg:
- Code regel 2-3: De variabelen 'a' en 'b' declareren als gegevenstype 'NUMBER'.
- Code lijn 4: De variabele 'upper_limit' declareren als 'NUMBER' met waarde '4'.
- Code lijn 6: De melding "Programma gestart" wordt afgedrukt.
- Code lijn 7: De buitenste lus is gelabeld als "outer_loop".
- Code lijn 9: De waarde van 'a' wordt met 1 verhoogd.
- Code lijn 11: De binnenste lus is gelabeld als "inner_loop".
- Code lijn 13: Een exit-conditie die controleert of 'a' groter is dan de waarde van 'upper_limit'. Zo niet, dan gaat het programma verder; anders wordt de buitenste lus direct verlaten.
- Code lijn 14: Afdrukken van de waarde van 'b'.
- Code lijn 15: Verhoogt de waarde van 'b' met 1.
- Code lijn 16: Een exit-voorwaarde die controleert of 'b' groter is dan 'a'. Zo ja, dan wordt de binnenste lus verlaten.
- Code lijn 19: Het bericht "Programma voltooid" afdrukken.






