CASE-uttalande i Oracle PL/SQL med exempel
⚡ Smart sammanfattning
En PL/SQL CASE-sats väljer ett alternativ från flera baserat på en väljare, ungefär som IF-THEN-ELSIF men tydligare. En enkel CASE matchar ett väljarvärde, medan en sökt CASE utvärderar ett villkor i varje WHEN-sats och kör det första som är sant.
Vad är ett CASE-uttalande?
En CASE-sats liknar IF-THEN-ELSIF-satsen; den väljer ett alternativ baserat på ett villkor från de tillgängliga alternativen.
- Ett CASE-uttryck använder en "selektor" snarare än ett booleskt uttryck för att välja sekvensen.
- Värdet på uttrycket i CASE-satsen behandlas som en väljare.
- Uttrycket kan vara av vilken typ som helst (aritmetik, variabler, etc.).
- Varje alternativ tilldelas ett visst fördefinierat värde (selektor), och det alternativ vars selektorvärde matchar det villkorliga uttryckets värde exekveras.
- Till skillnad från IF-THEN-ELSIF kan CASE-satsen också användas i SQL-satser.
- ELSE-blocket i en CASE-sats innehåller sekvensen som ska köras när inget av alternativen är valt.
syntax
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- I syntaxen ovan returnerar uttrycket ett värde som kan vara av vilken typ som helst.
- Varje 'WHEN'-klausul är ett alternativ som har en och en .
- 'WHEN'-satsen vars värde matchar uttrycket är vald, och dess är avrättad.
- Blocket 'ELSE' är valfritt och innehåller att köra när inga alternativ matchar.
- 'END' markerar slutet på CASE-satsen och är en obligatorisk del av CASE.
Exempel 1: Aritmetisk beräkning med hjälp av CASE
I det här exemplet gör vi en aritmetisk beräkning mellan två tal, 55 och 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 Förklaring
- Code rad 2: Deklarerar variabeln 'a' som 'NUMBER' och initierar den med värdet '55'.
- Code rad 3: Deklarerar variabeln 'b' som 'NUMBER' och initierar den med värdet '5'.
- Code rad 4: Deklarerar variabeln 'arth_operation' som 'VARCHAR2' av storlek 20 och initierar den med värdet 'MULTIPLY'.
- Code rad 6: Skriver ut meddelandet ”Programmet startade”.
- Code rad 7: CASE kontrollerar uttryckets värde. Här är värdet för 'arth_operation' 'MULTIPLY', vilket behandlas som väljaren.
- Code rad 10: WHEN-klausulen med värdet 'MULTIPLY' matchar väljaren, så kontrollenheten väljer detta actionblock och skriver ut 'Multiplikation av talen är: 275'.
- Code rad 13: Markerar slutet på CASE-satsen.
- Code rad 14: Skriver ut meddelandet ”Program slutfört”.
Code Produktion
Program started. Multiplication of the numbers are: 275 Program completed.
SÖKT FALL Uttalande
Den sökta CASE-satsen liknar CASE-satsen, men istället för att använda en väljare för att välja alternativet har den sökta CASE-satsen villkoret definierat direkt i WHEN-satsen.
- Den första WHEN-klausulen som uppfyller villkoret exekveras, och kontrollanten hoppar över de återstående alternativen.
syntax
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- I syntaxen ovan har varje WHEN-klausul en separat och .
- WHEN-klausulen för vilken uttrycket returnerar TRUE exekveras.
- Blocket 'ELSE' är valfritt och innehåller att verkställa när inget av alternativen är uppfyllt.
- 'END' markerar slutet på CASE-satsen och är en obligatorisk del av CASE.
Exempel 1: Aritmetisk beräkning med hjälp av sökt CASE
I det här exemplet gör vi en aritmetisk beräkning mellan två tal, 55 och 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 Förklaring
- Code rad 2: Deklarerar variabeln 'a' som 'NUMBER' och initierar den med värdet '55'.
- Code rad 3: Deklarerar variabeln 'b' som 'NUMBER' och initierar den med värdet '5'.
- Code rad 4: Deklarerar variabeln 'arth_operation' som 'VARCHAR2' av storlek 20 och initierar den med värdet 'DIVIDE'.
- Code rad 6: Skriver ut meddelandet ”Programmet startade”.
- Code rad 7: Den sökta CASE-satsen börjar. Klausulerna för ADD, SUBTRACT och MULTIPLY hoppas över, eftersom deras villkor inte matchar värdet för 'arth_operation'.
- Code rad 14: WHEN-klausuluttrycket "arth_operation = 'DIVIDE'" är uppfyllt och returnerar TRUE.
- Code rad 15: Åtgärdsblocket för WHEN-klausulen exekveras och 'Division av talen är: 11' skrivs ut.
- Code rad 17: Markerar slutet på CASE-satsen.
- Code rad 18: Skriver ut meddelandet ”Program slutfört”.
Code Produktion
Program started. Division of the numbers are: 11 Program completed.
Jämförelse av FALL och SÖKT FALL
Båda formerna väljer en gren, men de skiljer sig åt i hur grenen väljs, vilket sammanfattas nedan.
| Typ | BESKRIVNING | Användning |
|---|---|---|
| CASE | Liknande den OM-DÅ-ELSIF En 'selektor' används för att välja alternativet istället för ett booleskt uttryck. | Används för att välja mellan flera alternativ med hjälp av en väljare. |
| SÖKT FALL | En CASE-sats utan någon faktisk väljare. Istället innehåller den villkoret (som utvärderas till SANT eller FALSKT) som väljer alternativet. | Används för att välja mellan mer än två alternativ, oftast med avståndsvillkor. |

