CASE-erklæring i Oracle PL/SQL med eksempler
⚡ Smart opsummering
En PL/SQL CASE-sætning vælger ét alternativ ud af flere baseret på en selector, ligesom IF-THEN-ELSIF, men tydeligere. En simpel CASE matcher en selectorværdi, mens en søgt CASE evaluerer en betingelse i hver WHEN-klausul og kører den første, der er sand.

Hvad er en CASE-erklæring?
En CASE-sætning ligner IF-THEN-ELSIF-sætningen; den vælger ét alternativ baseret på en betingelse blandt de tilgængelige muligheder.
- En CASE-sætning bruger en "selektor" i stedet for et boolsk udtryk til at vælge sekvensen.
- Værdien af udtrykket i CASE-sætningen behandles som en selektor.
- Udtrykket kan være af enhver type (aritmetik, variabler osv.).
- Hvert alternativ tildeles en bestemt foruddefineret værdi (selektor), og det alternativ, hvis selektorværdi matcher værdien af det betingede udtryk, udføres.
- I modsætning til IF-THEN-ELSIF kan CASE-sætningen også bruges i SQL-sætninger.
- ELSE-blokken i en CASE-sætning indeholder den sekvens, der skal udføres, når ingen af alternativerne er valgt.
Syntaks
CASE (expression) WHEN <value1> THEN action_block1; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- I ovenstående syntaks returnerer udtrykket en værdi, der kan være af en hvilken som helst type.
- Hver 'HVENÅR'-klausul er et alternativ, der har en og en .
- 'WHEN'-klausulen, hvis værdi matcher udtrykket, er valgt, og dens er henrettet.
- 'ELSE'-blokken er valgfri og indeholder at udføre, når der ikke er noget alternativ, der matcher.
- 'END' markerer slutningen af CASE-sætningen og er en obligatorisk del af CASE.
Eksempel 1: Aritmetisk beregning ved hjælp af CASE
I dette eksempel laver vi en aritmetisk beregning mellem to tal, 55 og 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 Forklaring
- Code linje 2: Deklarerer variablen 'a' som 'NUMBER' og initialiserer den med værdien '55'.
- Code linje 3: Deklarerer variablen 'b' som 'NUMBER' og initialiserer den med værdien '5'.
- Code linje 4: Deklarerer variablen 'arth_operation' som 'VARCHAR2' af størrelse 20 og initialiserer den med værdien 'MULTIPLY'.
- Code linje 6: Udskriver sætningen “Program startet”.
- Code linje 7: CASE kontrollerer værdien af udtrykket. Her er værdien af 'arth_operation' 'MULTIPLY', som behandles som selektoren.
- Code linje 10: WHEN-klausulen med værdien 'MULTIPLY' matcher selektoren, så controlleren vælger denne handlingsblok og udskriver 'Multiplikation af tallene er: 275'.
- Code linje 13: Markerer slutningen af CASE-sætningen.
- Code linje 14: Udskriver sætningen “Program afsluttet”.
Code Produktion
Program started. Multiplication of the numbers are: 275 Program completed.
SØGTE SAG Udtalelse
Den søgte CASE-sætning ligner CASE-sætningen, men i stedet for at bruge en selektor til at vælge alternativet, har den søgte CASE betingelsen defineret direkte i WHEN-klausulen.
- Den første WHEN-klausul, der opfylder betingelsen, udføres, og controlleren springer de resterende alternativer over.
Syntaks
CASE WHEN <expression1> THEN action_block1; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- I ovenstående syntaks har hver WHEN-klausul en separat og .
- WHEN-klausulen, for hvilken udtrykket returnerer TRUE, udføres.
- 'ELSE'-blokken er valgfri og indeholder at udføre, når ingen af alternativerne er opfyldt.
- 'END' markerer slutningen af CASE-sætningen og er en obligatorisk del af CASE.
Eksempel 1: Aritmetisk beregning ved hjælp af søgt CASE
I dette eksempel laver vi en aritmetisk beregning mellem to tal, 55 og 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 Forklaring
- Code linje 2: Deklarerer variablen 'a' som 'NUMBER' og initialiserer den med værdien '55'.
- Code linje 3: Deklarerer variablen 'b' som 'NUMBER' og initialiserer den med værdien '5'.
- Code linje 4: Deklarerer variablen 'arth_operation' som 'VARCHAR2' af størrelse 20 og initialiserer den med værdien 'DIVIDE'.
- Code linje 6: Udskriver sætningen “Program startet”.
- Code linje 7: Den søgte CASE-sætning begynder. Klausulerne for ADD, SUBTRACT og MULTIPLY springes over, da deres betingelser ikke stemmer overens med værdien af 'arth_operation'.
- Code linje 14: WHEN-klausulen udtrykket "arth_operation = 'DIVIDE'" er opfyldt og returnerer TRUE.
- Code linje 15: Handlingsblokken i WHEN-klausulen udføres, og 'Division af tallene er: 11' udskrives.
- Code linje 17: Markerer slutningen af CASE-sætningen.
- Code linje 18: Udskriver sætningen “Program afsluttet”.
Code Produktion
Program started. Division of the numbers are: 11 Program completed.
Sammenligning af CASE og SØGT CASE
Begge former vælger én gren, men de adskiller sig i, hvordan grenen vælges, som opsummeret nedenfor.
| Type | Beskrivelse | Brug |
|---|---|---|
| CASE | Svarende til HVIS-SÅ-ELSIF en 'selektor' bruges til at vælge alternativet i stedet for et boolsk udtryk. | Bruges til at vælge mellem flere alternativer ved hjælp af en vælger. |
| SØGTE SAG | En CASE-sætning uden en egentlig selektor. I stedet indeholder den betingelsen (som evalueres til TRUE eller FALSE), der vælger alternativet. | Bruges til at vælge mellem mere end to alternativer, oftest med rækkeviddebetingelser. |
