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.

  • ๐Ÿ”€ Syfte: CASE vรคljer ett handlingsblock frรฅn mรฅnga med hjรคlp av en vรคljare istรคllet fรถr en boolesk kedja.
  • ๐ŸŽฏ Vรคljare: CASE-uttrycket utvรคrderas en gรฅng och jรคmfรถrs mot varje WHEN-vรคrde.
  • ๐Ÿ”Ž Sรถkte CASE: Sรคtter ett fullstรคndigt villkor i varje WHEN-klausul och kรถr det fรถrsta som รคr sant.
  • ๐Ÿงฎ Vilken typ som helst: Selektorn kan vara en variabel, ett tal eller ett aritmetiskt uttryck.
  • ๐Ÿ›Ÿ ANNAN: Det valfria ELSE-blocket kรถrs nรคr inga alternativa matchningar finns.
  • ๐Ÿ”š SLUTFALL: Ett obligatoriskt END CASE avslutar programsatsen.
  • ๐Ÿ—„๏ธ SQL-vรคnlig: Till skillnad frรฅn IF kan CASE ocksรฅ anvรคndas direkt inuti SQL-satser.

CASE-uttalande i Oracle PL / SQL

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.

Vanliga frรฅgor

Ett enkelt CASE-vรคrde jรคmfรถr ett selectorvรคrde med varje WHEN-vรคrde. Ett sรถkt CASE-vรคrde har ingen selector och utvรคrderar ett fullstรคndigt villkor i varje WHEN, sรฅ det hanterar intervall och sammansatta tester.

Ja. Ett CASE-uttryck kan fรถrekomma i en SELECT-, WHERE- eller ORDER BY-klausul, vilket รคr en viktig fรถrdel jรคmfรถrt med IF-THEN-ELSIF, en konstruktion som bara fungerar inuti PL/SQL-block.

En CASE-sats genererar undantaget CASE_NOT_FOUND om ingen gren matchar och ingen ELSE finns. Att lรคgga till en ELSE, รคven en tom NULL-รฅtgรคrd, undviker detta kรถrtidsfel.

Ja. Nรคr grenarna jรคmfรถr ett uttryck med fasta vรคrden kan AI skriva om kedjan till ett renare CASE. Verifiera resultatet, eftersom ett CASE utan en ELSE beter sig annorlunda รคn ett saknat ELSIF.

Ett CASE-uttryck kรถr ett actionblock per gren och avslutas med END CASE. Ett CASE-uttryck returnerar ett enda vรคrde och avslutas med END, sรฅ det kan tilldelas en variabel eller anvรคndas i SQL.

Sammanfatta detta inlรคgg med: