Oracle PL/SQL IF THEN ELSE-Anweisung: ELSIF, NESTED-IF

Was sind Entscheidungsaussagen?

Entscheidungsaussagen sind diejenigen, die รผber die Flusskontrolle entscheiden SQL Aussagen basierend auf den Bedingungen. Es gibt dem Programmierer eine bessere Kontrolle darรผber, ob er die Ausfรผhrung eines bestimmten Codes verhindern kann (Diagramm 1) oder einen gewรผnschten Code basierend auf der Bedingung auswรคhlen kann (Diagramm 2). Nachfolgend finden Sie die bildliche Darstellung der โ€žErklรคrung zur Entscheidungsfindungโ€œ.

Diagramm zur Entscheidungsfindung
Diagramm zur Entscheidungsfindung

Arten von Entscheidungsaussagen:

Oracle bietet die folgenden Arten von Entscheidungsaussagen.

  • WENN, DANN
  • WENN-DANN-SONST
  • WENN-DANN-ELSIF
  • NESTED-IF
  • CASE
  • Gesuchter Fall

WENN-DANN-Anweisung

Die IF-THEN-Anweisung wird hauptsรคchlich verwendet, um einen bestimmten Codeabschnitt nur dann auszufรผhren, wenn die Bedingung erfรผllt ist.

Der Zustand sollte nachgeben Boolean (Wahr/Falsch). Es handelt sich um eine grundlegende bedingte Anweisung, die es Oracle ermรถglicht, einen bestimmten Codeabschnitt basierend auf den vordefinierten Bedingungen auszufรผhren/zu รผberspringen.

Syntax fรผr IF THEN-Anweisungen:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • In der obigen Syntax folgt auf das Schlรผsselwort โ€žIFโ€œ eine Bedingung, die als โ€žTRUEโ€œ/โ€žFALSEโ€œ ausgewertet wird.
  • Die Steuerung fรผhrt das aus nur wenn die Bedingung wiederkehrt .
  • Im Falle einer Bedingung wird ausgewertet dann รผberspringt SQL das , und es beginnt mit der Ausfรผhrung des Codes neben dem Block โ€žEND IFโ€œ.

Hinweis: Immer wenn die Bedingung als โ€žNULLโ€œ ausgewertet wird, behandelt SQL โ€žNULLโ€œ als โ€žFALSCHโ€œ.

Beispiel 1: In diesem Beispiel drucken wir eine Meldung, wenn die Zahl grรถรŸer als 100 ist. Dazu fรผhren wir den folgenden Code aus

Um eine Meldung auszudrucken, wenn eine Zahl einen Wert รผber 100 hat, fรผhren wir den folgenden Code aus.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(โ€˜Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
dbms_output.put_line(โ€˜Program completed.');
END;
/

Code Erlรคuterung:

  • Code Zeile 2: Die Variable 'a' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '10' initialisiert.
  • Code Zeile 4: Ausgabe der Meldung โ€žProgramm gestartetโ€œ.
  • Code Zeile 5: รœberprรผfung der Bedingung, ob die Variable 'a' grรถรŸer als '100' ist.
  • Code Zeile 6: Wenn 'a' grรถรŸer als '100' ist, wird โ€ža ist grรถรŸer als 100โ€œ ausgegeben. Wenn 'a' kleiner oder gleich 100 ist, ist die Bedingung nicht erfรผllt, daher wird die obige Ausgabeanweisung ignoriert.
  • Code Zeile 8: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ.

Code Ausgang:

Program started.
Program completed.

Beispiel 2: In diesem Beispiel werden wir eine Nachricht drucken, wenn ein bestimmtes Alphabet in englischen Vokalen (A, E, I, O, U) vorhanden ist.

Um eine Nachricht auszudrucken, wenn das angegebene Zeichen ein Vokal ist, fรผhren wir den folgenden Code aus.

DECLARE 
a CHAR(1) :=โ€™uโ€™;
BEGIN
IF UPPER(a) in ('Aโ€™,'E','I','0','U' ) THEN 
dbms_output.put_line(โ€˜The character is in English Vowels');
END IF;
END;
/

Code Erlรคuterung:

  • Code Zeile 2: Deklarieren Sie die Variable โ€žaโ€œ als โ€žCHARโ€œ des Datentyps GrรถรŸe โ€ž1โ€œ und initialisieren Sie sie mit dem Wert โ€žuโ€œ.
  • Code Zeile 4: รœberprรผfung der Bedingung, ob die Variable 'a' in der Liste vorhanden ist ('A','E','I','O','U').
  • Der Wert von โ€žaโ€œ wurde vor dem Vergleich in GroรŸbuchstaben umgewandelt, damit beim Vergleich die GroรŸ-/Kleinschreibung nicht beachtet wird.
  • Code Zeile 5: Wenn โ€žaโ€œ in der Liste vorhanden ist, wird die Aussage โ€žDas Zeichen ist in englischen Vokalenโ€œ gedruckt. Wenn die Bedingung fehlschlรคgt, gibt dieses Programm keine Ausgabe aus, da wir auรŸerhalb des IF-THEN-Blocks keine Druckanweisung ausgegeben haben.

Code Ausgang:

The character is in English Vowels

IF-THEN-ELSE-Anweisung

  • Die IF-THEN-ELSE-Anweisung wird hauptsรคchlich verwendet, um basierend auf der Bedingung zwischen zwei Alternativen auszuwรคhlen.
  • Nachfolgend finden Sie die Syntaxdarstellung der IF-THEN-ELSE-Anweisung.

Syntax fรผr IF-THEN-ELSE-Anweisungen:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • In der obigen Syntax folgt auf das Schlรผsselwort โ€žIFโ€œ eine Bedingung, die als โ€žTRUEโ€œ/โ€žFALSEโ€œ ausgewertet wird.
  • Die Steuerung fรผhrt das aus nur wenn die Bedingung wiederkehrt .
  • Im Falle einer Bedingung wird ausgewertet Dann wird SQL ausgefรผhrt .
  • In jedem Fall wird einer der beiden Aktionsblรถcke ausgefรผhrt.

Hinweis: Immer wenn die Bedingung โ€žNULLโ€œ ergibt, behandelt SQL โ€žNULLโ€œ als โ€žFALSCHโ€œ.

Beispiel 1: In diesem Beispiel geben wir eine Meldung aus, ob die angegebene Zahl ungerade oder gerade ist.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (โ€˜Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
dbms_output.put_line (โ€˜Program completed.โ€™);
END;
/

Code Erlรคuterung:

  • Code Zeile 2: Die Variable 'a' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '11' initialisiert.
  • Code Zeile 4: Ausgabe der Meldung โ€žProgramm gestartetโ€œ.
  • Code Zeile 5: รœberprรผfe die Bedingung, ob der Betrag der Variablen 'a' nach '2' gleich 0 ist.
  • Code Zeile 6: Wenn '0', dann wird โ€ža ist eine gerade Zahlโ€œ ausgegeben.
  • Code Zeile 7: Wenn der Modulo-Wert nicht gleich '0' ist, gibt die Bedingung zurรผck Daher wird die Meldung โ€ža ist eine ungerade Zahlโ€œ ausgegeben.
  • Code Zeile 10: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ

Code Ausgang:

Program started.
a is odd number
Program completed.

IF-THEN-ELSIF-Anweisung

  • Die IF-THEN-ELSIF-Anweisung wird hauptsรคchlich dort verwendet, wo eine Alternative aus einer Menge von Alternativen ausgewรคhlt werden soll, wobei jede Alternative ihre eigenen Bedingungen hat, die erfรผllt werden mรผssen.
  • Die ersten Bedingungen, die zurรผckkehren ausgefรผhrt und die รผbrigen Bedingungen werden รผbersprungen.
  • Die IF-THEN-ELSIF-Anweisung kann einen โ€žELSEโ€œ-Block enthalten. Dieser โ€žELSEโ€œ-Block wird ausgefรผhrt, wenn keine der Bedingungen erfรผllt ist.

Hinweis: Der ELSE-Block ist in dieser bedingten Anweisung optional. Wenn kein ELSE-Block vorhanden ist und keine der Bedingungen erfรผllt ist, รผberspringt der Controller den gesamten Aktionsblock und beginnt mit der Ausfรผhrung des verbleibenden Teils des Codes.

Syntax fรผr IF-THEN-ELSIF-Anweisungen:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE โ€”optional 
<action_block_else>
END if;
  • In der obigen Syntax fรผhrt das Steuerelement Folgendes aus nur wenn die Bedingung1 zurรผckkehrt .
  • Wenn Bedingung 1 nicht erfรผllt ist, prรผft der Controller, ob Bedingung 2 vorliegt.
  • Der Controller verlรคsst die IF-Anweisung in den folgenden beiden Fรคllen.
    • Wenn der Controller eine Bedingung gefunden hat, die zurรผckgegeben wird . In diesem Fall wird der entsprechende action_block ausgefรผhrt und der Controller verlรคsst diesen IF-Anweisungsblock und beginnt mit der Ausfรผhrung des restlichen Codes.
    • Wenn keine der Bedingungen erfรผllt ist, fรผhrt der Controller den ELSE-Block (falls vorhanden) aus und verlรคsst dann die IF-Anweisung.

Hinweis: Immer wenn die Bedingung โ€žNULLโ€œ ergibt, behandelt SQL โ€žNULLโ€œ als โ€žFALSCHโ€œ.

Beispiel 1: Ohne ELSE-Block

In diesem Beispiel drucken wir die Note basierend auf den angegebenen Noten ohne andere Bedingung aus (Note >= 70 Note A, Note >=40 und Note <70 Note B, Note >=35 und Note <40 Note C).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(โ€˜Program started.โ€™ );
IF( mark >= 70) THEN 
dbms_output.put_line(โ€˜Grade Aโ€™);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(โ€˜Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(โ€˜Grade Cโ€™);
END IF;
dbms_output.put_line(โ€˜Program completed.โ€™); 
END;
/

Code Erlรคuterung:

  • Code Zeile 2: Die Variable 'mark' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '55' initialisiert.
  • Code Zeile 4: Ausgabe der Meldung โ€žProgramm gestartetโ€œ.
  • Code Zeile 5: รœberprรผfung der Bedingung1, ob 'mark' grรถรŸer oder gleich 70 ist.
  • Code Zeile 7: Da Bedingung 1 nicht erfรผllt ist, wird Bedingung 2 '70>mark>=40โ€ฒ' geprรผft.
  • Code Zeile 8: Die Bedingung2 gibt Folgendes zurรผck Daher wird die Meldung โ€žNote Bโ€œ gedruckt.
  • Code Zeile 12: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ.
  • In diesem Fall wird die Bedingung3 โ€žMark < 35โ€œ รผbersprungen, da der Controller eine Bedingung gefunden hat, die zurรผckgegeben wird vor Bedingung3.

Code Ausgang:

Program started.
Grade B
Program completed.

Beispiel 2: Mit ELSE-Block

In diesem Beispiel drucken wir die Note basierend auf den angegebenen Noten mit der Bedingung โ€žsonstโ€œ (Note >= 70 Note A, Note >=40 und Note <70 Note B, Note >=35 und Note <40 Note C, sonst). โ€žKeine Noteโ€œ).

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(โ€˜Program started.โ€™ );
IF( mark >= 70) THEN 
dbms_output.put_line(โ€˜Grade Aโ€™); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(โ€˜Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(โ€˜Grade C);
ELSE
dbms_output.put_line(โ€˜No Gradeโ€™);
END IF;
dbms_output.put_line(โ€˜Program completed.' ); 
END;
/

Code Erlรคuterung:

  • Code Zeile 2: Die Variable 'mark' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '25' initialisiert.
  • Code Zeile 4: Ausgabe der Meldung โ€žProgramm gestartetโ€œ.
  • Code Zeile 5: รœberprรผfung der Bedingung 1, ob 'mark' grรถรŸer oder gleich 70 ist.
  • Code Zeile 7: Da Bedingung 1 nicht erfรผllt ist, wird Bedingung 2 '70>mark>=40โ€ฒ' geprรผft.
  • Code Zeile 8: Da Bedingung 2 nicht erfรผllt ist, wird Bedingung 3 '40>mark>=35โ€ฒ' geprรผft.
  • Code Zeile 11: Da alle Bedingungen nicht erfรผllt sind, prรผft die Steuerung nun, ob ein ELSE-Block vorhanden ist, und gibt die Meldung โ€žKeine Noteโ€œ aus dem ELSE-Block aus.
  • Code Zeile 14: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ.

Code Ausgang:

Program started.
No Grade 
Program completed.

NESTED-IF-Anweisung

  • Mit der NESTED-IF-Anweisung kรถnnen Programmierer grundsรคtzlich eine oder mehrere โ€žIFโ€œ-Bedingungen in andere โ€žIFโ€œ-Bedingungen einfรผgen andere als normale Aussagen.
  • Jede โ€žIFโ€œ-Bedingung sollte eine separate โ€žEND IFโ€œ-Anweisung haben, die das Ende des Gรผltigkeitsbereichs dieser Bedingung markiert .
  • Die โ€žIFโ€œ-Anweisung betrachtet die nรคchstgelegene โ€žEND IFโ€œ-Anweisung als Endpunkt fรผr diese bestimmte Bedingung.
  • Die bildliche Darstellung fรผr NESTED-IF ist im folgenden Diagramm dargestellt.

NESTED-IF-Anweisung

NESTED-IF-Anweisung

IF <conditionl: returns Boolean>
THEN
	โ€”executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; โ€”END IF corresponds to condition2
<action_blockl ends>
END IF; โ€”END IF corresponds to condition1

Syntaxerklรคrung:

  • In der obigen Syntax enthรคlt das รคuรŸere IF eine weitere IF-Anweisung in seinem Aktionsblock.
  • Die Bedingung1 kehrt zurรผck , dann wird die Steuerung ausgefรผhrt und prรผft die Bedingung1.
  • Wenn Bedingung2 ebenfalls zurรผckgegeben wird , Dann wird auch ausgefรผhrt.
  • Im Falle von Bedingung2 wird Folgendes ausgewertet: dann รผberspringt SQL das .

Hier sehen wir ein Beispiel fรผr Nested If โ€“

Beispiel einer verschachtelten If-Anweisung: GrรถรŸte von drei Zahlen

In diesem Beispiel drucken wir die grรถรŸte von drei Zahlen mithilfe der Nested-If-Anweisung. Die Zahlen werden im Deklarationsteil zugewiesen, wie Sie im folgenden Code sehen kรถnnen, d. h. Zahl = 10,15, 20 und XNUMX, und die maximale Zahl wird mithilfe der Nested-If-Anweisungen abgerufen.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(โ€˜Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(โ€™Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(โ€˜A is greatestโ€™); 
	ELSE
	dbms_output.put_line(โ€˜C is greatestโ€™); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(โ€™B is greatest' ); 
	ELSE
	dbms_output.put_line(โ€™C is greatest' ); 
	END IF;
END IF;
dbms_output.put_line(โ€˜Program completed.โ€™ );
END;
/

Code Erlรคuterung:

  • Code Zeile 2: Die Variable 'a' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '10' initialisiert.
  • Code Zeile 3: Die Variable 'b' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '15' initialisiert.
  • Code Zeile 4: Die Variable 'c' wird als Datentyp 'NUMBER' deklariert und mit dem Wert '20' initialisiert.
  • Code Zeile 6: Ausgabe der Meldung โ€žProgramm gestartetโ€œ (Zeile 6).
  • Code Zeile 7: รœberprรผfung der Bedingung1, ob 'a' grรถรŸer als 'b' ist (Zeile 7).
  • Code Zeile 10: Wenn 'a' grรถรŸer als 'b' ist, dann prรผft die Bedingung in 'nested-if 1', ob 'a' grรถรŸer als 'c' ist (Zeile 10).
  • Code Zeile 13: Wenn 'a' immer noch grรถรŸer ist, wird die Meldung 'A ist grรถรŸer' ausgegeben (Zeile 11). Andernfalls, wenn Bedingung 2 nicht zutrifft, wird 'C ist grรถรŸer' ausgegeben (Zeile 13).
  • Code Zeile 18: Falls Bedingung1 den Wert โ€žfalseโ€œ zurรผckgibt, prรผft die Bedingung in โ€žnested-if 2โ€œ, ob โ€žbโ€œ grรถรŸer als โ€žcโ€œ ist (Zeile 18).
  • Code Zeile 21: Wenn 'b' grรถรŸer als 'c' ist, wird die Meldung 'B ist am grรถรŸten' ausgegeben (Zeile 19), andernfalls, wenn Bedingung 2 nicht erfรผllt ist, wird 'C ist am grรถรŸten' ausgegeben (Zeile 21).
  • Code Zeile 24: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ (Zeile 24).

Ausgabe des Codes:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Zusammenfassung

In diesem Kapitel haben wir die verschiedenen Entscheidungsaussagen sowie deren Syntax und Beispiele kennengelernt. Die folgende Tabelle enthรคlt eine Zusammenfassung der verschiedenen bedingten Anweisungen, die wir besprochen haben.

TYP BESCHREIBUNG ANWENDUNG
WENN, DANN Prรผft auf eine boolesche Bedingung, ob der Code im โ€žTHENโ€œ-Block TRUE ausgefรผhrt wird. Zum รœberspringen/Ausfรผhren eines bestimmten Codes basierend auf der Bedingung.
WENN-DANN-SONST Prรผft auf eine boolesche Bedingung, ob TRUE-Code im โ€žTHENโ€œ-Block ausgefรผhrt wird, wenn falscher Code im โ€žELSEโ€œ-Block ausgefรผhrt wird. Am besten geeignet im โ€žTHIS-ODER-THATโ€œ-Zustand.
WENN-DANN-ELSIF Prรผft in sequentieller Reihenfolge auf eine boolesche Bedingung. Der erste Block in der Sequenz, der die TRUE-Bedingung zurรผckgibt, wird ausgefรผhrt. Wenn keine der Bedingungen in der Sequenz TRUE ist, wird der Code im โ€žELSEโ€œ-Block ausgefรผhrt. Wird meistens zur Auswahl aus mehr als zwei Alternativen verwendet.
NESTED-IF Ermรถglicht eine oder mehrere IF-THEN- oder IF-THEN-ELSIF-Anweisungen innerhalb einer oder mehrerer anderer IF-THEN- oder IF-THEN-ELSIF-Anweisungen. Wird hauptsรคchlich in verschachtelten Situationen verwendet.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: