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.

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