Oracle PL/SQL LOOP met voorbeeld
Wat zijn lussen?
Met loops kan een bepaald deel van de code in een programma het gewenste aantal keren worden uitgevoerd.
In deze tutorial gaan we het lusconcept in PL/SQL en de controlestroom in lussen zien.
Inleiding tot het Loops-concept
Het Loops-concept biedt het volgende voordeel bij het coderen.
- Herbruikbaarheid van code
- Kleinere codegrootte
- Gemakkelijke controlestroom
- Verminderde complexiteit
Het onderstaande diagram toont het lusconcept op een grafische manier
In het bovenstaande diagram wordt de lusvoorwaarde gecontroleerd en zolang aan de lusvoorwaarde wordt voldaan, wordt het uitvoeringsblok uitgevoerd.
In elke iteratie moet de lustellervariabele die daadwerkelijk de lusvoorwaarde bepaalt, worden aangepast om de besturing uit de lus te laten gaan. In sommige gevallen is deze lustellervariabele een increment/decrement-operator voor een vooraf gedefinieerde telling, en in sommige gevallen is het een zoekvoorwaarde die het blok blijft uitvoeren totdat het eraan voldoet.
Verklaringen voor lusregeling
Voordat u het lussenconcept leert, is het verplicht om de luscontrole-instructies te leren. Loop control-instructies zijn instructies die feitelijk de uitvoeringsstroom binnen de lus regelen. Hieronder vindt u een gedetailleerde beschrijving van de lusbesturingsinstructies.
VERDER
Dit trefwoord stuurt een instructie naar de PL/SQL-engine dat wanneer de PL/SQL-engine dit trefwoord in de lus tegenkomt, de resterende code in het uitvoeringsblok van de code wordt overgeslagen en de volgende iteratie onmiddellijk wordt gestart. Dit wordt voornamelijk gebruikt als de code in de lus voor bepaalde iteratiewaarden wil worden overgeslagen.
VERLATEN / VERLATEN WANNEER
Dit trefwoord stuurt een instructie naar de PL/SQL-engine dat wanneer de PL/SQL-engine dit trefwoord tegenkomt, deze onmiddellijk de huidige lus zal verlaten. Als de PL/SQL-engine de EXIT tegenkomt in een geneste lus, dan zal deze uit de lus komen waarin deze is gedefinieerd, dat wil zeggen in geneste lussen. Het geven van EXIT in de binnenste lus zal de besturing alleen verlaten vanuit de binnenste lus, maar niet van de buitenste lus. 'EXIT WHEN' wordt gevolgd door een expressie die een Booleaans resultaat oplevert. Als het resultaat TRUE is, wordt de besturing EXIT.
GOTO
Deze statement zal de controle overdragen aan de gelabelde statement (“GOTO ;”). Dit heeft de volgende beperkingen
- De besturingsoverdracht kan alleen binnen de subprogramma's plaatsvinden.
- Overdracht van controle kan niet plaatsvinden van het gedeelte voor het afhandelen van uitzonderingen naar het uitvoeringsgedeelte
Het gebruik van deze verklaring wordt niet aanbevolen tenzij er geen andere alternatieven zijn, omdat de traceerbaarheid van de codecontrole in het programma erg moeilijk zal zijn vanwege de overdracht van de controle van het ene onderdeel naar het andere onderdeel.
Soorten lus in PL/SQL
PL / SQL biedt de volgende drie soorten lussen
- Basislusverklaring
- Voor lusinstructie
- While-lus-instructie
Basislusverklaring
Deze lusinstructie is de eenvoudigste lusstructuur in PL/SQL. Het uitvoeringsblok begint met het trefwoord 'LOOP' en eindigt met het trefwoord 'END LOOP'.
De uitgangsvoorwaarde moet binnen dit uitvoeringsblok worden opgegeven, zodat de controle de lus verlaat.
Het EXIT-sleutelwoord moet expliciet in het uitvoeringsgedeelte worden opgegeven om de lus te verlaten.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Syntaxis uitleg:
- In de bovenstaande syntaxis markeert het sleutelwoord 'LOOP' het begin van de lus en 'END LOOP' markeert het einde van de lus.
- Het uitvoeringsblok bevat alle code die moet worden uitgevoerd, inclusief de EXIT-voorwaarde.
- Het uitvoeringsgedeelte kan elke uitvoeringsinstructie bevatten.
Opmerking: Een basislusinstructie zonder EXIT-sleutelwoord zal een INFINITE-LOOP zijn die nooit zal stoppen.
Voorbeeld 1: In dit voorbeeld gaan we getallen van 1 tot 5 printen met behulp van een basislusinstructie. Hiervoor voeren we de volgende code uit.
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 Verklaring:
- Coderegel 2: De variabele 'a' declareren als gegevenstype 'NUMBER' en deze initialiseren met de waarde '1'.
- Coderegel 4: Afdrukken van de melding “Programma gestart”.
- Coderegel 5: Het trefwoord 'LOOP' markeert het begin van de lus.
- Coderegel 6: Drukt de waarde van 'a' af.
- Coderegel 7: Verhoogt de waarde van 'a' met +1.
- Coderegel 8: Controleert of de waarde van 'a' groter is dan 5.
- Coderegel 9: Het trefwoord 'END LOOP' markeert het einde van het uitvoeringsblok.
- De code van regel 6 tot en met regel 8 zal doorgaan met uitvoeren totdat 'a' de waarde 6 bereikt, omdat de voorwaarde TRUE retourneert en de besturing de lus verlaat.
- Coderegel 10: Afdrukken van de verklaring “Programma voltooid”
Etikettering van lussen
In PL/SQL kunnen de lussen worden gelabeld. Het label moet tussen “<<” en “>>” worden geplaatst. Het labelen van lussen, vooral in geneste luscodes, zal een betere leesbaarheid opleveren. Het label kan worden opgegeven in het EXIT-commando om die specifieke lus te verlaten. Met behulp van label kan de besturing worden gemaakt om de buitenste lus van de geneste lussen direct te verlaten vanaf elke plek binnen de lussen, door het commando exit te geven, gevolgd door het label van de buitenste lus.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Syntaxis uitleg:
- In de bovenstaande syntaxis heeft de out-lus nog een lus erin.
- De '< >' en '< >' zijn de labels van deze lussen.
Voorbeeld 1: In dit voorbeeld gaan we getallen printen die beginnen bij 1 met behulp van de Basic loop statement. Elk getal wordt net zo vaak geprint als zijn waarde. De bovengrens van de reeks is vastgelegd in het programmadeclaratiegedeelte. Laten we leren hoe we het labelconcept kunnen gebruiken om dit te bereiken. Hiervoor voeren we de volgende code uit
DECLARE a NUMBER:=0; b NUMBER; upper-limit NUMBER :=4; BEGIN dbms_output.put_line(‘Program started.' ); «outerloop» LOOP a:=a+1; b:=l; «inner loop» LOOP EXIT outer_loop WHEN a > upper_limit; dbms_output.put_line(a); b:=b+l; EXIT inner_loop WHEN b>a; END LOOP; END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Verklaring:
- Coderegel 2-3: De variabele 'a' en 'b' declareren als gegevenstype 'NUMBER'.
- Coderegel 4: De variabele 'upper_limit' declareren als gegevenstype 'NUMBER' met waarde '4'
- Coderegel 6: Afdrukken van de melding “Programma gestart”.
- Coderegel 7: De buitenste lus is gelabeld als “outer_loop”
- Coderegel 9: De waarde van 'a' wordt met 1 verhoogd.
- Coderegel 11: De binnenste lus is gelabeld als “inner_loop”.
- Coderegel 13: EXIT-voorwaarde die controleert of de waarde 'a' hoger is dan de 'upper_limit'-waarde. Als dat niet het geval is, gaat hij verder, anders verlaat hij de buitenste lus direct.
- Coderegel 14: Afdrukken van de waarde van 'b'.
- Coderegel 15: Verhoogt de waarde van 'b' met +1.
- Coderegel 16: EXIT-voorwaarde die controleert of de waarde van 'b' hoger is dan 'a'. Als dat zo is, verlaat het de besturing via de binnenste lus.
- Coderegel 14: Afdrukken van de verklaring “Programma voltooid”
Samenvatting
Ringleiding | Basislus |
EXIT-criteria | Exit wanneer u het trefwoord 'EXIT' tegenkomt in het uitvoeringsgedeelte |
Gebruik | Goed te gebruiken als de exit niet op een bepaalde voorwaarde is gebaseerd. |