Oracle PL / SQL LOOP met voorbeeld

Inhoudsopgave:

Anonim

Wat zijn loops?

Met lussen 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 bekijken. Je zult leren-

  • Inleiding tot Loops Concept
  • Verklaringen voor lusregeling
  • Soorten lussen in PL / SQL
  • Basic Loop-instructie
  • Etikettering van lussen

Inleiding tot Loops Concept

Loops-concept biedt het volgende voordeel bij het coderen.

  • Herbruikbaarheid van code
  • Verminderde codegrootte
  • Gemakkelijke controle
  • Verminderde complexiteit

Het onderstaande diagram toont het lusconcept op een picturale manier

In het bovenstaande diagram wordt de lusconditie gecontroleerd en zolang aan de lusconditie is voldaan, wordt het uitvoeringsblok uitgevoerd.

In elke iteratie moet de lusteller-variabele die feitelijk de lusconditie bepaalt, worden gewijzigd om de besturing uit de lus te laten treden. In sommige gevallen is deze lusteller-variabele een increment / decrement-operator voor een vooraf gedefinieerde telling, en in sommige gevallen is het een zoekvoorwaarde die het blok blijft uitvoeren totdat het voldoet.

Verklaringen voor lusregeling

Voordat u het lussenconcept leert, is het verplicht om kennis te nemen van lusbesturingsinstructies. Loop control statements zijn degene die feitelijk de stroom van uitvoering binnen de lus besturen. Hieronder vindt u de gedetailleerde beschrijving van de lusbesturingsverklaringen.

DOORGAAN MET

Dit sleutelwoord stuurt een instructie naar de PL / SQL-engine dat wanneer de PL / SQL-engine dit sleutelwoord in de lus tegenkomt, het de resterende code in het uitvoeringsblok van de code zal overslaan en de volgende iteratie onmiddellijk zal starten. Dit wordt voornamelijk gebruikt als de code in de lus voor bepaalde iteratiewaarden wil worden overgeslagen.

VERLATEN / VERLATEN WANNEER

Dit sleutelwoord stuurt een instructie naar de PL / SQL-engine die, wanneer de PL / SQL-engine dit sleutelwoord tegenkomt, onmiddellijk de huidige lus verlaat. Als de PL / SQL-engine de EXIT tegenkomt in een geneste lus, dan komt deze uit de lus waarin deze is gedefinieerd, dwz in een geneste lus, geeft EXIT in de binnenste lus alleen de controle uit de binnenste lus, maar niet van de buitenste lus. 'EXIT WHEN' wordt gevolgd door een uitdrukking die een Booleaans resultaat geeft. Als het resultaat WAAR is, zal de besturing VERLATEN.

GA NAAR

Deze instructie zal de controle overbrengen naar de gelabelde instructie ("GOTO

  • Overdracht van controle is alleen mogelijk binnen de subprogramma's.
  • Overdracht van controle is niet mogelijk van het uitzonderingsafhandelingsgedeelte naar het uitvoeringsgedeelte

Het gebruik van deze verklaring wordt niet aanbevolen, tenzij er geen andere alternatieven zijn, aangezien 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.

Soorten lussen in PL / SQL

PL / SQL biedt de volgende drie soorten lussen

  • Basic loop-instructie
  • For loop-instructie
  • While loop-instructie

Basic Loop-instructie

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 besturing de lus verlaat.

Het EXIT-sleutelwoord moet expliciet in het uitvoeringsgedeelte worden opgegeven om de lus te verlaten.

LOOPEND LOOP;
Syntaxis Uitleg:
  • In de bovenstaande syntaxis markeert het sleutelwoord 'LOOP' het begin van de lus en 'END LOOP' het einde van de lus.
  • Het uitvoeringsblok bevat alle code die moet worden uitgevoerd, inclusief de EXIT-voorwaarde.
  • Het uitvoeringsgedeelte kan elke uitvoeringsverklaring bevatten.

Opmerking: Basic loop-instructie zonder EXIT-sleutelwoord is een INFINITE-LOOP die nooit zal stoppen.

Voorbeeld 1 : In dit voorbeeld gaan we een nummer van 1 tot 5 afdrukken met behulp van een basislus-instructie. Daarvoor voeren we de volgende code uit.

DECLAREa NUMBER:=1;BEGINdbms_output.put_line('Program started.');LOOPdbms_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 'NUMBER' datatype en deze initialiseren met waarde '1'.
  • Coderegel 4 : Afdrukken van het statement "Programma gestart".
  • Coderegel 5: 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: Trefwoord 'END LOOP' markeert het einde van het uitvoeringsblok.
  • De code van regel 6 tot regel 8 zal worden uitgevoerd tot 'a' de waarde 6 bereikt, aangezien 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 loops worden gelabeld. Het label moet tussen "<<" en ">>" staan. Het labelen van lussen, met name in geneste luscodes, zorgt voor meer leesbaarheid. Het label kan worden gegeven in het EXIT-commando om die specifieke lus te verlaten. Met behulp van label kan de controle worden uitgevoerd 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 buitenste luslabel.

<>LOOP  . <> LOOP --inner  END LOOP; . END LOOP;
Syntaxis Uitleg:
  • In de bovenstaande syntaxis heeft de out-lus nog een lus erin.
  • De '<>' en '<>' zijn de labels van deze loops.

Voorbeeld 1 : In dit voorbeeld gaan we een nummer afdrukken vanaf 1 met behulp van de Basic loop-instructie. Elk nummer wordt zo vaak afgedrukt als de waarde ervan. De bovengrens van de reeks wordt vastgelegd op het programma-aangiftegedeelte. Laten we eens kijken hoe we het labelconcept kunnen gebruiken om dit te bereiken. Daarvoor voeren we de volgende code uit

DECLAREa NUMBER:=0;b NUMBER;upper-limit NUMBER :=4;BEGINdbms_output.put_line(‘Program started.' );«outerloop»‭ ‬LOOPa:=a+1;b:=l;«inner loop»LOOPEXIT 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 'NUMBER' datatype.
  • Coderegel 4 : de variabele 'upper_limit' declareren als 'NUMBER' datatype met waarde '4'
  • Coderegel 6 : Afdrukken van het statement "Programma gestart".
  • Coderegel 7: De buitenste lus is gelabeld als "outer_loop"
  • Coderegel 9: De waarde van 'a' wordt verhoogd met 1.
  • Coderegel 11: Binnenste lus is gelabeld als "inner_loop".
  • Coderegel 13: EXIT-voorwaarde die controleert of de waarde 'a' hoger is dan de waarde 'upper_limit'. Zo niet, dan gaat het verder, anders verlaat het 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 dit het geval is, verlaat het de besturing vanuit de binnenste lus.
  • Coderegel 14: Afdrukken van de verklaring "Programma voltooid"

Overzicht

Lus Basislus
EXIT-criteria Sluit af wanneer het trefwoord 'EXIT' in het uitvoeringsgedeelte wordt aangetroffen
Gebruik Goed te gebruiken als het verlaten niet op een bepaalde conditie is gebaseerd.