CASE-Anweisung in Oracle PL/SQL mit Beispielen

โšก Intelligente Zusammenfassung

Die PL/SQL-CASE-Anweisung wรคhlt anhand eines Selektors eine Alternative aus mehreren aus, รคhnlich wie IF-THEN-ELSIF, aber รผbersichtlicher. Eine einfache CASE-Anweisung gleicht den Selektorwert ab, wรคhrend eine CASE-Anweisung mit Suchfunktion die Bedingungen in jeder WHEN-Klausel prรผft und die erste erfรผllte Bedingung ausfรผhrt.

  • ๐Ÿ”€ Zweck: CASE wรคhlt mithilfe eines Selektors anstelle einer booleschen Kette einen Aktionsblock aus einer Vielzahl von Aktionen aus.
  • ๐ŸŽฏ Selector: Der CASE-Ausdruck wird einmal ausgewertet und mit jedem WHEN-Wert verglichen.
  • ๐Ÿ”Ž Gesuchter Fall: Fรผgt in jede WHEN-Klausel eine vollstรคndige Bedingung ein und fรผhrt die erste aus, die zutrifft.
  • ๐Ÿงฎ Beliebiger Typ: Der Selektor kann eine Variable, eine Zahl oder ein arithmetischer Ausdruck sein.
  • ๐Ÿ›Ÿ SONST: Der optionale ELSE-Block wird ausgefรผhrt, wenn keine alternative รœbereinstimmung gefunden wird.
  • ๐Ÿ”š ENDFALL: Ein obligatorischer END CASE beendet die Anweisung.
  • ๐Ÿ—„๏ธ SQL-freundlich: Im Gegensatz zu IF kann CASE auch direkt innerhalb von SQL-Anweisungen verwendet werden.

CASE-Anweisung in Oracle PL / SQL

Was ist eine CASE-Anweisung?

Eine CASE-Anweisung ist รคhnlich wie eine IF-THEN-ELSIF-Anweisung; sie wรคhlt anhand einer Bedingung eine Alternative aus den verfรผgbaren Optionen aus.

  • Eine CASE-Anweisung verwendet einen โ€žSelektorโ€œ anstelle eines booleschen Ausdrucks, um die Reihenfolge auszuwรคhlen.
  • Der Wert des Ausdrucks in der CASE-Anweisung wird als Selektor behandelt.
  • Der Ausdruck kann von beliebigem Typ sein (arithmetisch, Variablen usw.).
  • Jeder Alternative wird ein bestimmter vordefinierter Wert (Selektor) zugewiesen, und die Alternative, deren Selektorwert mit dem Wert des bedingten Ausdrucks รผbereinstimmt, wird ausgefรผhrt.
  • Im Gegensatz zu IF-THEN-ELSIF kann die CASE-Anweisung auch in SQL-Anweisungen verwendet werden.
  • Der ELSE-Block in einer CASE-Anweisung enthรคlt die auszufรผhrende Sequenz, wenn keine der Alternativen ausgewรคhlt wird.

Syntax

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • In der obigen Syntax gibt der Ausdruck einen Wert zurรผck, der von beliebigem Typ sein kann.
  • Jede 'WHEN'-Klausel ist eine Alternative, die eine und ein Die
  • Die 'WHEN'-Klausel, deren Wert mit dem Ausdruck รผbereinstimmt, wird ausgewรคhlt, und ihre wird ausgefรผhrt.
  • Der 'ELSE'-Block ist optional und enthรคlt die Auszufรผhren, wenn keine Alternative รผbereinstimmt.
  • 'END' kennzeichnet das Ende der CASE-Anweisung und ist ein obligatorischer Bestandteil von CASE.

Beispiel 1: Arithmetische Berechnung mit CASE

In diesem Beispiel fรผhren wir eine arithmetische Berechnung zwischen zwei Zahlen durch, 55 und 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'MULTIPLY';
BEGIN
dbms_output.put_line('Program started.');
CASE (arth_operation)
WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b );
WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b );
WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Erlรคuterung

  • Code Zeile 2: Die Variable 'a' wird als 'NUMBER' deklariert und mit dem Wert '55' initialisiert.
  • Code Zeile 3: Die Variable 'b' wird als 'NUMBER' deklariert und mit dem Wert '5' initialisiert.
  • Code Zeile 4: Deklaration der Variable 'arth_operation' als 'VARCHAR2' der GrรถรŸe 20 und Initialisierung mit dem Wert 'MULTIPLY'.
  • Code Zeile 6: Ausgabe der Meldung โ€žProgramm gestartetโ€œ.
  • Code Zeile 7: Die CASE-Anweisung prรผft den Wert des Ausdrucks. Hier ist der Wert von 'arth_operation' 'MULTIPLY', was als Selektor interpretiert wird.
  • Code Zeile 10: Die WHEN-Klausel mit dem Wert 'MULTIPLY' entspricht dem Selektor, daher wรคhlt der Controller diesen Aktionsblock aus und gibt 'Multiplikation der Zahlen ist: 275' aus.
  • Code Zeile 13: Markiert das Ende der CASE-Anweisung.
  • Code Zeile 14: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ.

Code Ausgang

Program started.
Multiplication of the numbers are: 275
Program completed.

SEARCHED CASE-Anweisung

Die gesuchte CASE-Anweisung รคhnelt der CASE-Anweisung, jedoch wird bei der gesuchten CASE-Anweisung die Bedingung direkt in der WHEN-Klausel definiert, anstatt einen Selektor zur Auswahl der Alternative zu verwenden.

  • Die erste WHEN-Klausel, die die Bedingung erfรผllt, wird ausgefรผhrt, und der Controller รผberspringt die verbleibenden Alternativen.

Syntax

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • In der obigen Syntax hat jede WHEN-Klausel eine separate Und Die
  • Die WHEN-Klausel, fรผr die der Ausdruck TRUE zurรผckgibt, wird ausgefรผhrt.
  • Der 'ELSE'-Block ist optional und enthรคlt die Auszufรผhren, wenn keine der Alternativen erfรผllt ist.
  • 'END' kennzeichnet das Ende der CASE-Anweisung und ist ein obligatorischer Bestandteil von CASE.

Beispiel 1: Arithmetische Berechnung mit Hilfe des gesuchten CASE

In diesem Beispiel fรผhren wir eine arithmetische Berechnung zwischen zwei Zahlen durch, 55 und 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'DIVIDE';
BEGIN
dbms_output.put_line('Program started.');
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line('Addition of the numbers are: '||a+b );
WHEN arth_operation = 'SUBTRACT'
THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = 'MULTIPLY'
THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN arth_operation = 'DIVIDE'
THEN dbms_output.put_line('Division of the numbers are: '|| a/b );
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Erlรคuterung

  • Code Zeile 2: Die Variable 'a' wird als 'NUMBER' deklariert und mit dem Wert '55' initialisiert.
  • Code Zeile 3: Die Variable 'b' wird als 'NUMBER' deklariert und mit dem Wert '5' initialisiert.
  • Code Zeile 4: Deklaration der Variable 'arth_operation' als 'VARCHAR2' der GrรถรŸe 20 und Initialisierung mit dem Wert 'DIVIDE'.
  • Code Zeile 6: Ausgabe der Meldung โ€žProgramm gestartetโ€œ.
  • Code Zeile 7: Die gesuchte CASE-Anweisung beginnt. Die Klauseln fรผr ADD, SUBTRACT und MULTIPLY werden รผbersprungen, da ihre Bedingungen nicht mit dem Wert von 'arth_operation' รผbereinstimmen.
  • Code Zeile 14: Der WHEN-Klauselausdruck โ€žarth_operation = 'DIVIDE'โ€œ ist erfรผllt und gibt TRUE zurรผck.
  • Code Zeile 15: Der Aktionsblock der WHEN-Klausel wird ausgefรผhrt und 'Division der Zahlen sind: 11' wird ausgegeben.
  • Code Zeile 17: Markiert das Ende der CASE-Anweisung.
  • Code Zeile 18: Ausgabe der Meldung โ€žProgramm abgeschlossenโ€œ.

Code Ausgang

Program started.
Division of the numbers are: 11
Program completed.

Vergleich von Fall und gesuchtem Fall

Beide Formulare wรคhlen einen Zweig aus, unterscheiden sich jedoch in der Art und Weise der Zweigauswahl, wie nachfolgend zusammengefasst.

Typ Beschreibung Anwendungsbereich
CASE ร„hnlich wie bei der WENN-DANN-ELSIF Anweisung. Anstelle eines booleschen Ausdrucks wird ein โ€žSelektorโ€œ verwendet, um die Alternative auszuwรคhlen. Dient dazu, mithilfe eines Selektors aus mehreren Alternativen auszuwรคhlen.
Gesuchter Fall Eine CASE-Anweisung ohne eigentlichen Selektor. Stattdessen enthรคlt sie die Bedingung (die zu TRUE oder FALSE ausgewertet wird), die die Alternative auswรคhlt. Dient dazu, aus mehr als zwei Alternativen zu wรคhlen, meist unter Berรผcksichtigung bestimmter Bereichsbedingungen.

Hรคufig gestellte Fragen

Ein einfacher CASE-Block vergleicht einen Selektorwert mit jedem WHEN-Wert. Ein suchender CASE-Block hingegen verwendet keinen Selektor und wertet in jedem WHEN-Block eine vollstรคndige Bedingung aus, wodurch Bereiche und zusammengesetzte Bedingungen verarbeitet werden kรถnnen.

Ja. Ein CASE-Ausdruck kann in einer SELECT-, WHERE- oder ORDER BY-Klausel vorkommen, was ein entscheidender Vorteil gegenรผber IF-THEN-ELSIF ist, einer Konstruktion, die nur innerhalb von PL/SQL-Blรถcken funktioniert.

Eine CASE-Anweisung lรถst die Ausnahme CASE_NOT_FOUND aus, wenn kein passender Zweig gefunden wird und kein ELSE-Zweig vorhanden ist. Das Hinzufรผgen eines ELSE-Zweigs, selbst eines leeren NULL-Zweigs, vermeidet diesen Laufzeitfehler.

Ja. Wenn die Zweige einen Ausdruck mit festen Werten vergleichen, kann die KI die Kette in eine รผbersichtlichere CASE-Anweisung umschreiben. รœberprรผfen Sie das Ergebnis, da sich eine CASE-Anweisung ohne ELSE-Zweig anders verhรคlt als eine fehlende ELSIF-Anweisung.

Eine CASE-Anweisung fรผhrt fรผr jeden Zweig einen Aktionsblock aus und endet mit END CASE. Ein CASE-Ausdruck gibt einen einzelnen Wert zurรผck und endet mit END, sodass er einer Variablen zugewiesen oder in SQL verwendet werden kann.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: