Oracle PL/SQL LOOP mit Beispiel
Was sind Schleifen?
Schleifen ermöglichen es, einen bestimmten Teil des Codes in einem Programm so oft auszuführen, wie gewünscht.
In diesem Tutorial sehen wir uns das Schleifenkonzept in PL/SQL und den Kontrollfluss in Schleifen an.
Einführung in das Loops-Konzept
Das Loop-Konzept bietet beim Codieren den folgenden Vorteil.
- Wiederverwendbarkeit von Code
- Reduzierte Codegröße
- Einfacher Kontrollfluss
- Reduzierte Komplexität
Das folgende Diagramm zeigt das Looping-Konzept bildlich
Im obigen Diagramm wird die Schleifenbedingung überprüft und solange die Schleifenbedingung erfüllt ist, wird der Ausführungsblock ausgeführt.
Bei jeder Iteration muss die Schleifenzählervariable, die tatsächlich die Schleifenbedingung bestimmt, geändert werden, damit die Steuerung die Schleife verlässt. In einigen Fällen ist diese Schleifenzählervariable ein Inkrement-/Dekrementoperator für eine vordefinierte Anzahl und in einigen Fällen eine Suchbedingung, die den Block so lange ausführt, bis sie erfüllt ist.
Schleifensteuerungsanweisungen
Bevor Sie das Schleifenkonzept erlernen, müssen Sie sich unbedingt mit Schleifenkontrollanweisungen vertraut machen. Schleifenkontrollanweisungen sind solche, die tatsächlich den Ausführungsfluss innerhalb der Schleife steuern. Nachfolgend finden Sie eine detaillierte Beschreibung der Schleifenkontrollanweisungen.
WEITER
Dieses Schlüsselwort sendet eine Anweisung an die PL/SQL-Engine, dass die PL/SQL-Engine jedes Mal, wenn sie in der Schleife auf dieses Schlüsselwort trifft, den verbleibenden Code im Ausführungsblock des Codes überspringt und die nächste Iteration sofort beginnt. Dies wird hauptsächlich verwendet, wenn der Code innerhalb der Schleife für bestimmte Iterationswerte übersprungen werden soll.
EXIT / EXIT WANN
Dieses Schlüsselwort sendet eine Anweisung an die PL/SQL-Engine, dass die PL/SQL-Engine jedes Mal, wenn sie auf dieses Schlüsselwort trifft, die aktuelle Schleife sofort verlässt. Wenn die PL/SQL-Engine in einer verschachtelten Schleife auf EXIT stößt, verlässt sie die Schleife, in der sie definiert wurde, d nicht von der äußeren Schleife. Auf „EXIT WHEN“ folgt ein Ausdruck, der ein boolesches Ergebnis liefert. Wenn das Ergebnis WAHR ist, wird die Steuerung beendet.
GOTO
Diese Anweisung übergibt die Steuerung an die markierte Anweisung („GOTO ;“). Dies hat die folgenden Einschränkungen
- Die Übertragung der Kontrolle kann nur innerhalb der Unterprogramme erfolgen.
- Die Übertragung der Kontrolle vom Ausnahmebehandlungsteil auf den Ausführungsteil ist nicht möglich
Die Verwendung dieser Anweisung wird nicht empfohlen, es sei denn, es gibt keine anderen Alternativen, da die Rückverfolgbarkeit der Codesteuerung im Programm aufgrund der Übertragung der Kontrolle von einem Teil auf einen anderen Teil sehr schwierig sein wird.
Arten von Schleifen in PL/SQL
PL / SQL bietet folgende drei Arten von Schleifen
- Grundlegende Schleifenanweisung
- For-Schleifenanweisung
- While-Schleifenanweisung
Grundlegende Schleifenanweisung
Diese Schleifenanweisung ist die einfachste Schleifenstruktur in PL/SQL. Der Ausführungsblock beginnt mit dem Schlüsselwort „LOOP“ und endet mit dem Schlüsselwort „END LOOP“.
Die Exit-Bedingung sollte innerhalb dieses Ausführungsblocks angegeben werden, damit der Austritt aus der Schleife gesteuert wird.
Um die Schleife zu verlassen, muss im Ausführungsteil explizit das Schlüsselwort EXIT angegeben werden.
LOOP <execution block starts> <EXIT condition based on developer criteria> <execution_block_ends> END LOOP;
Syntaxerklärung:
- In der obigen Syntax markiert das Schlüsselwort „LOOP“ den Anfang der Schleife und „END LOOP“ das Ende der Schleife.
- Der Ausführungsblock enthält den gesamten Code, der ausgeführt werden muss, einschließlich der EXIT-Bedingung.
- Der Ausführungsteil kann eine beliebige Ausführungsanweisung enthalten.
Hinweis: Eine einfache Schleifenanweisung ohne EXIT-Schlüsselwort ist eine Endlosschleife, die niemals stoppt.
Beispiel 1: In diesem Beispiel drucken wir Zahlen von 1 bis 5 mithilfe einer einfachen Schleifenanweisung. Dazu führen wir den folgenden Code aus.
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-Erklärung:
- Codezeile 2: Deklarieren Sie die Variable „a“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „1“.
- Codezeile 4: Ausdruck der Aussage „Programm gestartet“.
- Codezeile 5: Das Schlüsselwort „LOOP“ markiert den Anfang der Schleife.
- Codezeile 6: Gibt den Wert von 'a' aus.
- Codezeile 7: Erhöht den Wert von „a“ um +1.
- Codezeile 8: Überprüft, ob der Wert von 'a' größer als 5 ist.
- Codezeile 9: Das Schlüsselwort „END LOOP“ markiert das Ende des Ausführungsblocks.
- Der Code von Zeile 6 bis Zeile 8 wird so lange ausgeführt, bis „a“ den Wert 6 erreicht, da die Bedingung TRUE zurückgibt und die Steuerung die Schleife verlässt.
- Codezeile 10: Ausdrucken der Aussage „Programm abgeschlossen“
Beschriftung von Schleifen
In PL/SQL können die Schleifen beschriftet werden. Die Bezeichnung sollte zwischen „<<“ und „>>“ stehen. Die Beschriftung von Schleifen, insbesondere in verschachtelten Schleifencodes, sorgt für eine bessere Lesbarkeit. Die Bezeichnung kann im EXIT-Befehl angegeben werden, um diese bestimmte Schleife zu verlassen. Mit label kann die Steuerung so eingestellt werden, dass sie die äußere Schleife der verschachtelten Schleifen direkt an einer beliebigen Stelle innerhalb der Schleifen verlässt, indem der Exit-Befehl gefolgt von der Bezeichnung der äußeren Schleife gegeben wird.
<<OUTER_LOOP>> LOOP <execution_block_starts> . <<INNER_LOOP>> LOOP --inner <execution_part> END LOOP; . <executi_block_ends> END LOOP;
Syntaxerklärung:
- In der obigen Syntax enthält die Out-Schleife eine weitere Schleife.
- Das '< >' und '< >' sind die Bezeichnungen dieser Schleifen.
Beispiel 1: In diesem Beispiel drucken wir Zahlen beginnend bei 1 mithilfe der Basic-Schleifenanweisung. Jede Zahl wird so oft gedruckt, wie ihr Wert ist. Die Obergrenze der Reihe wird im Programmdeklarationsteil festgelegt. Lassen Sie uns lernen, wie wir das Label-Konzept nutzen können, um dies zu erreichen. Dazu führen wir den folgenden Code aus
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-Erklärung:
- Codezeile 2-3: Deklarieren der Variablen „a“ und „b“ als Datentyp „NUMBER“.
- Codezeile 4: Deklaration der Variablen „upper_limit“ als Datentyp „NUMBER“ mit dem Wert „4“
- Codezeile 6: Ausdruck der Aussage „Programm gestartet“.
- Codezeile 7: Die äußere Schleife wurde als „outer_loop“ bezeichnet.
- Codezeile 9: Der Wert von „a“ wird um 1 erhöht.
- Codezeile 11: Die innere Schleife wurde als „inner_loop“ bezeichnet.
- Codezeile 13: EXIT-Bedingung, die prüft, ob der Wert „a“ höher als der Wert „upper_limit“ ist. Wenn nicht, geht es weiter, andernfalls verlässt es die äußere Schleife direkt.
- Codezeile 14: Drucken des Werts von 'b'.
- Codezeile 15: Erhöht den Wert von 'b' um +1.
- Codezeile 16: EXIT-Bedingung, die prüft, ob der Wert von „b“ größer als „a“ ist. Wenn ja, wird die Steuerung aus der inneren Schleife verlassen.
- Codezeile 14: Ausdrucken der Aussage „Programm abgeschlossen“
Zusammenfassung
Loop | Grundlegende Schleife |
Abbruchkriterium | Beenden, wenn im Ausführungsteil auf das Schlüsselwort „EXIT“ gestoßen wird |
Anwendungsbereich | Gut zu verwenden, wenn der Ausstieg nicht auf einer bestimmten Bedingung basiert. |