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

Oracle PL/SQL-SCHLEIFE

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

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.

Grundlegende Schleifenanweisung

 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.

Grundlegende Schleifenanweisung

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.

Beschriftung von Schleifen

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

Beschriftung von SchleifenBeschriftung von Schleifen

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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: