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.

  • 🔀 Formål: CASE vælger én handlingsblok ud af mange ved hjælp af en selektor i stedet for en boolsk kæde.
  • 🎯 Vælger: CASE-udtrykket evalueres én gang og sammenlignes med hver WHEN-værdi.
  • 🔎 Søgte CASE: Sætter en fuld betingelse i hver WHEN-klausul og kører den første, der er sand.
  • 🧮 Enhver type: Selektoren kan være en variabel, et tal eller et aritmetisk udtryk.
  • 🛟 ANDET: Den valgfri ELSE-blok kører, når der ikke findes alternative match.
  • 🔚 SLUTSAGEN: En obligatorisk END CASE lukker sætningen.
  • 🗄️ SQL-venlig: I modsætning til IF kan CASE også bruges direkte i SQL-sætninger.

CASE-erklæring i Oracle PL / SQL

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.

Ofte Stillede Spørgsmål

En simpel CASE sammenligner én selector-værdi med hver WHEN-værdi. En søgt CASE har ingen selector og evaluerer en fuld betingelse i hver WHEN, så den håndterer intervaller og sammensatte tests.

Ja. Et CASE-udtryk kan forekomme i en SELECT-, WHERE- eller ORDER BY-klausul, hvilket er en vigtig fordel i forhold til IF-THEN-ELSIF, en konstruktion, der kun fungerer i PL/SQL-blokke.

En CASE-sætning genererer CASE_NOT_FOUND-undtagelsen, hvis ingen branch matcher, og ingen ELSE er til stede. Tilføjelse af en ELSE, selv en tom NULL-handling, undgår denne runtime-fejl.

Ja. Når grenene sammenligner ét udtryk med faste værdier, kan AI omskrive kæden til et renere CASE. Bekræft resultatet, da et CASE uden en ELSE opfører sig anderledes end et manglende ELSIF.

En CASE-sætning kører en handlingsblok pr. branch og slutter med END CASE. Et CASE-udtryk returnerer en enkelt værdi og slutter med END, så det kan tildeles en variabel eller bruges i SQL.

Opsummer dette indlæg med: