CASE-uttalande i Oracle PL/SQL med exempel
Vad är CASE Statement?
En CASE-sats liknar IF-THEN-ELSIF-satsen som väljer ett alternativ baserat på villkoret från de tillgängliga alternativen.
- CASE-satsen använder "selektor" snarare än ett booleskt uttryck för att välja sekvensen.
- Värdet på uttrycket i CASE-satsen kommer att 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 (väljare), och alternativet med väljarvärde som matchar det villkorliga uttrycksvärdet kommer att exekveras.
- Till skillnad från IF-THEN-ELSIF kan CASE-satsen också användas i SQL-satser.
- ELSE-blocket i CASE-satsen innehåller sekvensen som måste exekveras när inget av alternativen har valts.
syntax
CASE (expression) WHEN <valuel> THEN action_blockl; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- I ovanstående syntax kommer uttrycket att returnera ett värde som kan vara av vilken typ som helst (variabel, tal, etc.).
- Varje "WHEN"-sats behandlas som ett alternativ som har och .
- 'WHEN'-satsen som matchar värdet som uttrycket kommer att väljas och motsvarande kommer att verkställas.
- 'ANDES'-blocket är valfritt som håller som måste köras när inget av alternativen matchar uttrycksvärdet.
- 'END' markerar slutet på CASE-satsen, och det är en obligatorisk del av CASE.
Exempel 1: Aritmetisk beräkning med case
I det här exemplet ska vi göra en aritmetisk beräkning mellan två siffror 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; /
Kodförklaring
- Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med värdet '55'.
- Kodrad 3: Deklarerar variabeln 'b' som datatyp 'NUMBER' och initierar den med värdet '5.'
- Kodrad 4: Deklarerar variabeln 'arth_operation' som datatyp 'VARCHAR2' av storlek 20 och initierar den med värdet 'MULTIPLY'.
- Kodrad 6: Skriver ut satsen "Program started".
- Kodrad 7: CASE kontrollerar uttryckets värde. I det här fallet är värdet på variabeln 'arth_operation' 'MULTIPLY'. Detta värde kommer att behandlas som en väljare för denna CASE-sats nu.
- Kodrad 10: WHEN-satsen med värdet 'MULTIPLY' matchar med väljarvärdet, så styrenheten väljer detta action_block och skriver ut meddelandet 'Multiplicering av siffrorna är: 275'.
- Kodrad 13: Markerar slutet på CASE-satsen.
- Kodrad 14: Skriver ut påståendet "Program completed".
Kodutgång
Program started. Multiplication of the numbers are: 275 Program completed.
SÖKT FALL Uttalande
SEARCHED CASE-satsen liknar CASE-satsen, snarare än att använda väljaren för att välja alternativet, SEARCHED CASE kommer direkt att ha uttrycket definierat i WHEN-satsen.
- Den första WHEN-satsen som uppfyller villkoret kommer att exekveras, och styrenheten kommer att hoppa över de återstående alternativen.
syntax
CASE WHEN <expression1> THEN action_blockl; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- I ovanstående syntax har varje WHEN-sats separat och .
- WHEN-satsen för vilken uttrycket returnerar TRUE kommer att exekveras.
- 'ANDES'-blocket är valfritt som håller som måste utföras när inget av alternativen uppfyller.
- 'END' markerar slutet på CASE-satsen och det är en obligatorisk del av CASE.
Exempel 1: Aritmetisk beräkning med sökt fall
I det här exemplet ska vi göra en aritmetisk beräkning mellan två siffror 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; /
Kodförklaring
- Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med värdet '55'.
- Kodrad 3: Deklarerar variabeln 'b' som datatyp 'NUMBER' och initierar den med värdet '5'.
- Kodrad 4: Deklarerar variabeln 'arth_operation' som datatyp 'VARCHAR2' av storlek 20 och initierar den med värdet 'DIVIDE'.
- Kodrad 6: Skriver ut satsen "Program started".
- Kodrad 7: SEARCHED CASE-satsen börjar. Koden från rad 8 till rad 13 hoppas över eftersom deras väljarvärde (ADD, SUBTRACT, MULTIPLY) inte matchar värdet för 'arth_operation'.
- Kodrad 14: WHEN-satsuttrycket "arth_operation = 'DIVIDE'" är uppfyllt och uttrycket returnerar TRUE.
- Kodrad 15: Action_block för WHEN-satsen kommer att exekveras, och meddelandet 'Division of the numbers are: 11' kommer att skrivas ut.
- Kodrad 17: Markerar slutet på CASE-satsen.
- Kodrad 18: Skriver ut meddelandet "Program completed".
Kodutgång
Program started. Division of the numbers are: 11 Program completed.
Sammanfattning
TYP | BESKRIVNING | ANVÄNDANDE |
---|---|---|
CASE | Liknar OM-DÅ-ELSIF påstående. En 'SELECTOR' används för att välja alternativ istället för booleskt uttryck. | Används för att välja mellan flera alternativ med "SELECTOR" |
SÖKT FALL | CASE-sats utan egentlig 'SELECTOR'. Istället innehåller den det faktiska tillståndet (som utvärderas till TRUE/FALSE) som kommer att välja alternativen. | Används för att välja mellan mer än två alternativ oftast. |