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: