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.

  • ๐Ÿ” Doel: Een lus voert een stuk code vele malen uit, waardoor de code kleiner en complexer wordt.
  • ๐Ÿงญ Lussteller: Een tellervariabele bepaalt de lusvoorwaarde en moet veranderen om de lus te kunnen verlaten.
  • ๏ธ DOORGAAN: Slaat de rest van de huidige iteratie over en start de volgende.
  • ๐Ÿšช UITGANG / UITGANG WANNEER: De lus wordt direct verlaten, eventueel wanneer een Booleaanse voorwaarde waar is.
  • ???? ๏ธ labels: Een luslabel tussen dubbele punthaken zorgt ervoor dat EXIT zich op een buitenste lus richt.
  • ๏ธ Basislus: Het programma blijft draaien totdat een expliciete EXIT-opdracht wordt gegeven; zonder een dergelijke opdracht blijft het programma oneindig doorlopen.
  • ๐Ÿงฉ Drie typen: De basislus, de FOR-lus en de WHILE-lus dekken de meest voorkomende patronen.

Oracle PL/SQL-lus

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.

Toiletping Conceptstroom in PL/SQL

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:

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.

Basislusstructuur in PL/SQL

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.

Basislus voor het afdrukken van de cijfers 1 tot en met 5

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.

Gelabelde geneste lusstructuur

<<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.

Voorbeeld van een gelabelde lus, deel 1Voorbeeld van een gelabelde lus, deel 2

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.

Veelgestelde vragen

EXIT verlaat de lus onvoorwaardelijk. EXIT WHEN verlaat de lus alleen wanneer de volgende Booleaanse expressie waar is, waardoor een aparte IF rond een gewone EXIT niet meer nodig is.

Een label zorgt ervoor dat een EXIT-instructie in een binnenste lus in รฉรฉn stap een benoemde buitenste lus kan verlaten. Het maakt geneste code ook veel gemakkelijker leesbaar dan trackoning vlakte END LOOP-instructies.

Als het blok geen EXIT heeft, of als de teller de exit-conditie nooit bereikt, stopt de lus nooit. Zorg er altijd voor dat de teller de EXIT WHEN-conditie bereikt.

Vaak wel. AI kan tracControleer of de teller de EXIT-conditie nadert en geef een waarschuwing wanneer een lus geen bereikbare uitgang heeft, hoewel een data-afhankelijke uitgang nog steeds een testrun nodig heeft om te bevestigen.

CONTINUE slaat de rest van de huidige iteratie over en springt naar de volgende. Dit is handig wanneer bepaalde waarden genegeerd moeten worden zonder de lus volledig te verlaten.

Vat dit bericht samen met: