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

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


