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 stellt Folgendes bereitwing 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 werden wir eine Nachricht ausgeben, wenn die Zahl größer als 100 ist. Dazu führen wir Folgendes auswing Code

Um eine Nachricht zu drucken, wenn eine Zahl einen Wert über 100 hat, führen wir Folgendes auswing Code.

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-Erklärung:

  • Codezeile 2: Deklarieren Sie die Variable „a“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „10“.
  • Codezeile 4: Ausdruck der Anweisung „Programm gestartet“.
  • Codezeile 5: Überprüfung der Bedingung, ob Variable 'a' größer als '100' ist.
  • Codezeile 6: Wenn „a“ größer als „100“ ist, wird „a ist größer als 100“ gedruckt. Wenn „a“ kleiner oder gleich 100 ist, schlägt die Bedingung fehl und die obige Druckanweisung wird ignoriert.
  • Codezeile 8: Ausdruck der Aussage „Programm abgeschlossen“.

Codeausgabe:

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 zu drucken, wenn das angegebene Zeichen ein Vokal ist, führen wir Folgendes auswing Code.

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-Erklärung:

  • Codezeile 2: Deklarieren Sie die Variable „a“ als „CHAR“ des Datentyps Größe „1“ und initialisieren Sie sie mit dem Wert „u“.
  • Codezeile 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.
  • Codezeile 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.

Codeausgabe:

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-Erklärung:

  • Codezeile 2: Deklarieren Sie die Variable „a“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „11“.
  • Codezeile 4: Ausdruck der Anweisung „Programm gestartet“.
  • Codezeile 5: Überprüfung der Bedingung, ob der Modulus der Variablen 'a' mal '2' 0 ist.
  • Codezeile 6: Bei „0“ wird „a ist eine gerade Zahl“ ausgegeben.
  • Codezeile 7: Wenn der Modulwert ungleich „0“ ist, kehrt die Bedingung zurück , daher wird die Meldung „a ist eine ungerade Zahl“ gedruckt.
  • Codezeile 10: Ausdruck der Aussage „Programm abgeschlossen“

Codeausgabe:

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.

Note: 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 im Folgenden die IF-Anweisungwing zwei Fälle.
    • 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-Erklärung:

  • Codezeile 2: Deklarieren Sie die Variable „mark“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „55“.
  • Codezeile 4: Ausdruck der Anweisung „Programm gestartet“.
  • Codezeile 5: Überprüfung der Bedingung1, ob 'mark' größer oder gleich 70 ist.
  • Codezeile 7: Da Bedingung 1 fehlgeschlagen ist, wird Bedingung 2 „70>mark>=40“ überprüft.
  • Codezeile 8: Die Bedingung2 kehrt zurück , daher wird die Meldung „Grade B“ gedruckt.
  • Codezeile12: Ausdruck der Aussage „Programm abgeschlossen“.
  • In diesem Fall wird die Bedingung3 „Mark < 35“ übersprungen, da der Controller eine Bedingung gefunden hat, die zurückgegeben wird vor Bedingung3.

Codeausgabe:

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-Erklärung:

  • Codezeile 2: Deklarieren Sie die Variable „mark“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „25“.
  • Codezeile 4: Ausdruck der Anweisung „Programm gestartet“.
  • Codezeile 5: Überprüfung der Bedingung 1, ob 'mark' größer oder gleich 70 ist.
  • Codezeile 7: Da Bedingung 1 fehlgeschlagen ist, wird Bedingung 2 „70>mark>=40“ überprüft.
  • Codezeile 8: Da Bedingung 2 fehlgeschlagen ist, wird Bedingung 3 „40>mark>=35“ überprüft.
  • Codezeile 11: Da alle Bedingungen nicht erfüllt sind, prüft die Steuerung nun, ob ein ELSE-Block vorhanden ist, und gibt die Meldung „No Grade“ aus dem ELSE-Block aus.
  • Codezeile14: Ausdruck der Aussage „Programm abgeschlossen“.

Codeausgabe:

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 berücksichtigt die nearest '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 aus. Die Nummern werden im Deklarationsteil zugewiesen, wie Sie im Code unten sehen können, also Nummer = 10,15, 20 und XNUMX, und die maximale Anzahl wird mithilfe verschachtelter 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-Erklärung:

  • Codezeile 2: Deklarieren Sie die Variable „a“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „10“.
  • Codezeile 3: Deklarieren Sie die Variable „b“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „15“.
  • Codezeile 4: Deklarieren Sie die Variable „c“ als Datentyp „NUMBER“ und initialisieren Sie sie mit dem Wert „20“.
  • Codezeile 6: Drucken der Anweisung „Programm gestartet“ (Zeile 6).
  • Codezeile 7: Überprüfung der Bedingung1, ob 'a' größer als 'b' ist (Zeile 7).
  • Codezeile 10: Wenn „a“ größer als „b“ ist, prüft die Bedingung in „nested-if 1“, ob „a“ größer als „c“ ist (Zeile 10).
  • Codezeile 13: Wenn „a“ immer noch größer ist, wird die Meldung „A ist am größten“ ausgegeben (Zeile 11). Andernfalls wird, wenn Bedingung 2 fehlschlägt, „C ist am größten“ ausgegeben (Zeile 13).
  • Codezeile 18: Falls Bedingung1 „falsch“ zurückgibt, prüft die Bedingung in „nested-if 2“, ob „b“ größer als „c“ ist (Zeile 18).
  • Codezeile 21: Wenn „b“ größer als „c“ ist, wird die Meldung „B ist am größten“ gedruckt (Zeile 19). Andernfalls wird „C ist am größten“ ausgegeben, wenn Bedingung 2 fehlschlägt (Zeile 21).
  • Codezeile 24: Drucken der Anweisung „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.