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