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

Inhaltsverzeichnis:

Anonim

Was sind Entscheidungserklärungen?

Entscheidungsanweisungen sind diejenigen, die die Flusskontrolle von SQL-Anweisungen basierend auf den Bedingungen entscheiden. Dies gibt dem Programmierer eine bessere Kontrolle darüber, wie die Ausführung eines bestimmten Codes verhindert werden kann (Diagramm 1) oder ob ein gewünschter Code basierend auf der Bedingung ausgewählt werden soll (Diagramm 2). Unten ist die bildliche Darstellung der "Decision Making Statement".

Entscheidungsdiagramm

Arten von Entscheidungserklärungen:

Oracle bietet die folgenden Arten von Entscheidungserklärungen.

  • WENN, DANN
  • WENN-DANN-SONST
  • IF-THEN-ELSIF
  • NESTED-IF
  • FALL
  • SUCHFALL

In diesem Tutorial lernen Sie:

  • Einführung in die Entscheidungsfindung
  • IF-THEN-Anweisung
  • IF-THEN-ELSE-Anweisung
  • IF-THEN-ELSIF-Anweisung
  • NESTED-IF-Anweisung

IF-THEN-Anweisung

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

Die Bedingung sollte Boolean (True / False) ergeben. Es ist eine grundlegende bedingte Anweisung, die es dem ORACLE ermöglicht, einen bestimmten Code basierend auf den vordefinierten Bedingungen auszuführen / zu überspringen.

Syntax für IF THEN-Anweisungen:

IF THEN-executed only if the condition returns TRUEEND if;
  • In der obigen Syntax folgt auf das Schlüsselwort 'IF' eine Bedingung, die 'TRUE' / 'FALSE' ergibt.
  • Das Steuerelement führt den nur aus, wenn die Bedingung zurückgibt.
  • Wenn die Bedingung ergibt, überspringt SQL den und beginnt mit der Ausführung des Codes neben dem Block 'END IF'.

Hinweis: Immer wenn die Bedingung mit 'NULL' bewertet wird, behandelt SQL 'NULL' als 'FALSE'.

Beispiel 1 : In diesem Beispiel wird eine Nachricht gedruckt, wenn die Anzahl größer als 100 ist. Dazu führen wir den folgenden Code aus

Um eine Nachricht zu drucken, wenn eine Zahl einen Wert von mehr als 100 hat, führen wir den folgenden Code aus.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Code Erläuterung:

  • Codezeile 2: Deklarieren der Variablen 'a' als Datentyp 'NUMBER' und Initialisieren mit dem Wert '10'.
  • Codezeile 4: Drucken der Anweisung "Programm gestartet".
  • Codezeile 5: Überprüfen der Bedingung, ob die 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, sodass die obige Druckanweisung ignoriert wird.
  • Codezeile 8: Drucken der Anweisung "Programm abgeschlossen".

Code-Ausgabe:

Program started.Program completed. 

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

Um eine Nachricht zu drucken, wenn das angegebene Zeichen Vokal ist, führen wir den folgenden Code aus.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_output.put_line(‘The character is in English Vowels');END IF;END;/

Code Erläuterung:

  • Codezeile 2: Deklarieren der Variablen 'a' als 'CHAR' des Datentyps '1' und Initialisieren mit dem Wert 'u'.
  • Codezeile 4: Überprüfen 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, um den Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen.
  • Codezeile 5: Wenn 'a' in der Liste vorhanden ist, wird die Anweisung "Das Zeichen ist in englischen Vokalen" gedruckt. Wenn die Bedingung fehlgeschlagen ist, gibt dieses Programm keine Ausgabe aus, da wir außerhalb des IF-THEN-Blocks keine Druckanweisung ausgegeben haben.

Code-Ausgabe:

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.
  • Unten finden Sie die Syntaxdarstellung der IF-THEN-ELSE-Anweisung.

Syntax für IF-THEN-ELSE-Anweisungen:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • In der obigen Syntax folgt auf das Schlüsselwort 'IF' eine Bedingung, die 'TRUE' / 'FALSE' ergibt.
  • Das Steuerelement führt den nur aus, wenn die Bedingung zurückgibt.
  • Wenn die Bedingung ergibt, führt SQL aus.
  • In jedem Fall wird einer der beiden Aktionsblöcke ausgeführt.

Hinweis: Immer wenn die Bedingung 'NULL' ergibt, behandelt SQL 'NULL' als 'FALSE'.

Beispiel 1 : In diesem Beispiel wird eine Nachricht gedruckt, ob die angegebene Zahl ungerade oder gerade ist.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Code Erläuterung:

  • Codezeile 2: Deklarieren der Variablen 'a' als Datentyp 'NUMBER' und Initialisieren mit dem Wert '11'.
  • Codezeile 4: Drucken der Anweisung "Programm gestartet".
  • Codezeile 5: Überprüfen der Bedingung, ob der Modul der Variablen 'a' durch '2' 0 ist.
  • Codezeile 6: Wenn '0', wird "a ist gerade Zahl" gedruckt.
  • Codezeile 7: Wenn der Modulwert nicht gleich '0' ist, gibt die Bedingung zurück, sodass die Meldung "a ist eine ungerade Zahl" gedruckt wird.
  • Codezeile 10: Drucken der Anweisung "Programm abgeschlossen"

Code-Ausgabe:

Program started.a is odd numberProgram completed. 

IF-THEN-ELSIF-Anweisung

  • Die IF-THEN-ELSIF-Anweisung wird hauptsächlich verwendet, wenn eine Alternative aus einer Reihe von Alternativen ausgewählt werden sollte, wobei jede Alternative ihre eigenen Bedingungen hat, die erfüllt werden müssen.
  • Die ersten Bedingungen, die zurückgeben, werden ausgeführt und die verbleibenden 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 die Steuerung den gesamten Aktionsblock und beginnt mit der Ausführung des verbleibenden Teils des Codes.

Syntax für IF-THEN-ELSIF-Anweisungen:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • In der obigen Syntax führt das Steuerelement den nur aus, wenn die Bedingung1 zurückgibt.
  • Wenn Bedingung1 nicht erfüllt ist, prüft die Steuerung, ob Bedingung2 vorliegt.
  • Der Controller verlässt die IF-Anweisung in den folgenden beiden Fällen.
    • Wenn der Controller eine Bedingung gefunden hat, die zurückgibt. In diesem Fall wird der entsprechende action_block ausgeführt und die Steuerung verlässt diesen IF-Anweisungsblock und beginnt mit der Ausführung des verbleibenden Codes.
    • Wenn keine der Bedingungen erfüllt ist, führt der Then-Controller, falls vorhanden, den ELSE-Block aus und verlässt dann die IF-Anweisung.

Hinweis: Immer wenn die Bedingung 'NULL' ergibt, behandelt SQL 'NULL' als 'FALSE'.

Beispiel 1: Ohne ELSE-Block

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

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C’);END IF;dbms_output.put_line(‘Program completed.’);END;/

Code Erläuterung:

  • Codezeile 2: Deklarieren der Variablen 'mark' als Datentyp 'NUMBER' und Initialisieren mit dem Wert '55'.
  • Codezeile 4: Drucken der Anweisung "Programm gestartet".
  • Codezeile 5: Überprüfen Sie die Bedingung1, ob 'mark' größer oder gleich 70 ist.
  • Codezeile 7: Da Bedingung1 fehlgeschlagen ist, wird die Bedingung2 '70> Markierung> = 40 'überprüft.
  • Codezeile 8: Die Bedingung2 gibt zurück, daher wird die Meldung 'Note B' gedruckt.
  • Codezeile 12: Drucken der Anweisung "Programm abgeschlossen".
  • In diesem Fall wird die Bedingung3 'Markierung <35' übersprungen, da der Controller eine Bedingung gefunden hat, die vor Bedingung3 zurückgibt.

Code-Ausgabe:

Program started.Grade BProgram completed.

Beispiel 2 : Mit ELSE-Block

In diesem Beispiel drucken wir die Note basierend auf den angegebenen Noten mit der Bedingung else (Note> = 70 Note A, Note> = 40 und Note <70 Note B, Note> = 35 und Note <40 Note C, sonst 'No Grade').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_output.put_line(‘No Grade’);END IF;dbms_output.put_line(‘Program completed.' );END;/

Code Erläuterung:

  • Codezeile 2: Deklarieren der Variablen 'mark' als Datentyp 'NUMBER' und Initialisieren mit dem Wert '25'.
  • Codezeile 4: Drucken der Anweisung "Programm gestartet".
  • Codezeile 5: Überprüfen Sie die Bedingung 1, ob 'mark' größer oder gleich 70 ist.
  • Codezeile 7: Da Bedingung1 fehlgeschlagen ist, wird die Bedingung2 '70> Markierung> = 40 'überprüft.
  • Codezeile 8: Da Bedingung2 fehlgeschlagen ist, wird die Bedingung3 '40> Markierung> = 35 'überprüft.
  • Codezeile 11: Da alle Bedingungen fehlgeschlagen sind, prüft die Steuerung nun, ob ein ELSE-Block vorhanden ist, und druckt die Meldung 'No Grade' aus dem ELSE-Block.
  • Codezeile 14: Drucken der Anweisung "Programm abgeschlossen".

Code-Ausgabe:

Program started.No GradeProgram completed.

NESTED-IF-Anweisung

  • Mit der NESTED-IF-Anweisung können Programmierer grundsätzlich eine oder mehrere 'IF'-Bedingungen in den einer anderen' IF'-Bedingung einfügen, die keine normalen Anweisungen sind.
  • Jede 'IF'-Bedingung sollte eine separate' END IF'-Anweisung haben, die das Ende des Gültigkeitsbereichs dieses bestimmten markiert.
  • Die 'IF'-Anweisung betrachtet die nächste' END IF'-Anweisung als Endpunkt für diese bestimmte Bedingung.
  • Die bildliche Darstellung für NESTED-IF ist in der folgenden Abbildung dargestellt.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Syntax Erläuterung:
  • In der obigen Syntax enthält die äußere IF eine weitere IF-Anweisung in ihrem Aktionsblock.
  • Die Bedingung1 gibt zurück, dann führt die Steuerung aus und überprüft die Bedingung2.
  • Wenn Bedingung2 auch zurückgibt, wird auch ausgeführt.
  • Wenn Bedingung2 zu ausgewertet wird, überspringt SQL den .

Hier sehen wir ein Beispiel für Nested If -

Beispiel für eine verschachtelte If-Anweisung: Größte von drei Zahlen

In diesem Beispiel drucken wir die größte von drei Zahlen mithilfe der Nested-If-Anweisung. Die Nummern werden im Deklarationsteil zugewiesen, wie Sie im folgenden Code sehen können, dh Nummer = 10,15 und 20, und die maximale Anzahl wird mit verschachtelten if-Anweisungen abgerufen.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Code Erläuterung:

  • Codezeile 2: Deklarieren der Variablen 'a' als Datentyp 'NUMBER' und Initialisieren mit dem Wert '10'.
  • Codezeile 3: Deklarieren der Variablen 'b' als Datentyp 'NUMBER' und Initialisieren 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üfen Sie die Bedingung1, ob 'a' größer als 'b' ist (Zeile 7).
  • Codezeile 10: Wenn 'a' größer als 'b' ist, prüft die Bedingung in 'verschachtelt - wenn 1', ob 'a' größer als 'c' ist (Zeile 10).
  • Codezeile 13: Wenn immer noch 'a' größer ist, wird die Meldung 'A ist am größten' gedruckt (Zeile 11). Andernfalls wird "C ist am größten" gedruckt, wenn Bedingung 2 fehlschlägt (Zeile 13).
  • Codezeile 18: Wenn Bedingung1 false zurückgibt, prüft die Bedingung in 'verschachtelt - wenn 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). Wenn Bedingung 2 fehlschlägt, wird 'C am größten' gedruckt (Zeile 21).
  • Codezeile 24: Drucken der Anweisung "Programm abgeschlossen" (Zeile 24).

Ausgabe des Codes:

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

Zusammenfassung

In diesem Kapitel haben wir die verschiedenen Entscheidungsaussagen sowie deren Syntax und Beispiele kennengelernt. Die folgende Tabelle enthält eine Zusammenfassung verschiedener bedingter Anweisungen, die wir erörtert haben.

ART

BESCHREIBUNG

VERWENDUNG

WENN, DANN

Prüft auf eine boolesche Bedingung, ob TRUE-Code im Block 'THEN' 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 Block 'THEN' ausgeführt wird, wenn falscher Code im Block 'ELSE' ausgeführt wird.

Am besten geeignet in "DIESEM ODER DIESEM" Zustand.

IF-THEN-ELSIF

Überprüft, ob eine Boolesche Bedingung in sequentieller Reihenfolge vorliegt. 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 Block 'ELSE' ausgeführt.

Wird verwendet, um meistens aus mehr als zwei Alternativen zu wählen.

NESTED-IF

Ermöglicht eine oder mehrere IF-THEN- oder IF-THEN-ELSIF-Anweisungen in anderen IF-THEN- oder IF-THEN-ELSIF-Anweisungen.

Wird hauptsächlich in verschachtelten Zustandssituationen verwendet.