CASE-uttalelse i Oracle PL/SQL med eksempler

⚡ Smart oppsummering

En PL/SQL CASE-setning velger ett alternativ fra flere basert på en selektor, omtrent som IF-THEN-ELSIF, men tydeligere. En enkel CASE samsvarer med en selektorverdi, mens en søkt CASE evaluerer en betingelse i hver WHEN-klausul og kjører den første som er sann.

  • 🔀 Formål: CASE velger én handlingsblokk fra mange, ved å bruke en selektor i stedet for en boolsk kjede.
  • 🎯 Velger: CASE-uttrykket evalueres én gang og sammenlignes mot hver WHEN-verdi.
  • 🔎 Søkte CASE: Setter inn en fullstendig betingelse i hver WHEN-klausul og kjører den første som er sann.
  • 🧮 Enhver type: Selektoren kan være en variabel, et tall eller et aritmetisk uttrykk.
  • 🛟 ELLERS: Den valgfrie ELSE-blokken kjører når ingen alternative samsvarer.
  • 🔚 SLUTTSAKE: En obligatorisk END CASE lukker setningen.
  • 🗄️ SQL-vennlig: I motsetning til IF, kan CASE også brukes direkte i SQL-setninger.

CASE-uttalelse i Oracle PL / SQL

Hva er en CASE-erklæring?

En CASE-setning ligner på IF-THEN-ELSIF-setningen; den velger ett alternativ basert på en betingelse fra de tilgjengelige alternativene.

  • En CASE-setning bruker en «selektor» i stedet for et boolsk uttrykk for å velge sekvensen.
  • Verdien av uttrykket i CASE-setningen behandles som en selektor.
  • Uttrykket kan være av en hvilken som helst type (aritmetikk, variabler osv.).
  • Hvert alternativ tildeles en bestemt forhåndsdefinert verdi (selektor), og alternativet hvis selektorverdi samsvarer med verdien for det betingede uttrykket utføres.
  • I motsetning til IF-THEN-ELSIF, kan CASE-setningen også brukes i SQL-setninger.
  • ELSE-blokken i en CASE-setning inneholder sekvensen som skal utføres når ingen av alternativene er valgt.

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 syntaksen ovenfor returnerer uttrykket en verdi som kan være av en hvilken som helst type.
  • Hver «NÅR»-klausul er et alternativ som har en og en .
  • 'WHEN'-klausulen hvis verdi samsvarer med uttrykket er valgt, og dens er henrettet.
  • 'ELSE'-blokken er valgfri og inneholder å utføre når ingen alternativer matcher.
  • 'END' markerer slutten på CASE-setningen og er en obligatorisk del av CASE.

Eksempel 1: Aritmetisk beregning ved bruk av CASE

I dette eksemplet gjør vi en aritmetisk beregning mellom to tall, 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 variabelen 'a' som 'NUMBER' og initialiserer den med verdien '55'.
  • Code linje 3: Deklarerer variabelen 'b' som 'NUMBER' og initialiserer den med verdien '5'.
  • Code linje 4: Deklarerer variabelen 'arth_operation' som 'VARCHAR2' av størrelse 20 og initialiserer den med verdien 'MULTIPLY'.
  • Code linje 6: Skriver ut setningen «Programmet startet».
  • Code linje 7: CASE sjekker verdien av uttrykket. Her er verdien av 'arth_operation' 'MULTIPLY', som behandles som selektoren.
  • Code linje 10: WHEN-klausulen med verdien 'MULTIPLY' samsvarer med velgeren, så kontrolleren velger denne handlingsblokken og skriver ut 'Multiplikasjon av tallene er: 275'.
  • Code linje 13: Markerer slutten på CASE-setningen.
  • Code linje 14: Skriver ut setningen «Program fullført».

Code Produksjon

Program started.
Multiplication of the numbers are: 275
Program completed.

SØKT SAK Uttalelse

Den søkte CASE-setningen ligner på CASE-setningen, men i stedet for å bruke en velger til å velge alternativet, har den søkte CASE-setningen betingelsen definert direkte i WHEN-klausulen.

  • Den første WHEN-klausulen som oppfyller betingelsen utføres, og kontrolleren hopper over de gjenværende alternativene.

syntax

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • I syntaksen ovenfor har hver WHEN-klausul en separat og .
  • WHEN-klausulen som uttrykket returnerer TRUE for, utføres.
  • 'ELSE'-blokken er valgfri og inneholder å utføre når ingen av alternativene er oppfylt.
  • 'END' markerer slutten på CASE-setningen og er en obligatorisk del av CASE.

Eksempel 1: Aritmetisk beregning ved bruk av søkt CASE

I dette eksemplet gjør vi en aritmetisk beregning mellom to tall, 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 variabelen 'a' som 'NUMBER' og initialiserer den med verdien '55'.
  • Code linje 3: Deklarerer variabelen 'b' som 'NUMBER' og initialiserer den med verdien '5'.
  • Code linje 4: Deklarerer variabelen 'arth_operation' som 'VARCHAR2' av størrelse 20 og initialiserer den med verdien 'DIVIDE'.
  • Code linje 6: Skriver ut setningen «Programmet startet».
  • Code linje 7: Den søkte CASE-setningen begynner. Klausulene for ADD, SUBTRACT og MULTIPLY hoppes over, ettersom betingelsene deres ikke samsvarer med verdien til 'arth_operation'.
  • Code linje 14: WHEN-klausuluttrykket «arth_operation = 'DIVIDE'» er oppfylt og returnerer TRUE.
  • Code linje 15: Handlingsblokken til WHEN-klausulen utføres, og 'Divisjon av tallene er: 11' skrives ut.
  • Code linje 17: Markerer slutten på CASE-setningen.
  • Code linje 18: Skriver ut setningen «Program fullført».

Code Produksjon

Program started.
Division of the numbers are: 11
Program completed.

Sammenligning av CASE og RECED CASE

Begge formene velger én gren, men de er forskjellige i hvordan grenen velges, som oppsummert nedenfor.

typen Tekniske beskrivelser bruk
CASE Ligner på HVIS-SÅ-ELSIF setning. En 'selektor' brukes til å velge alternativet i stedet for et boolsk uttrykk. Brukes til å velge mellom flere alternativer ved hjelp av en velger.
SØKT SAK En CASE-setning uten noen faktisk selektor. I stedet inneholder den betingelsen (som evalueres til SANN eller USANN) som velger alternativet. Brukes til å velge mellom mer enn to alternativer, vanligvis med rekkeviddebetingelser.

Spørsmål og svar

En enkel CASE sammenligner én selektorverdi med hver WHEN-verdi. En søkt CASE har ingen selektor og evaluerer en fullstendig betingelse i hver WHEN, så den håndterer områder og sammensatte tester.

Ja. Et CASE-uttrykk kan vises i en SELECT-, WHERE- eller ORDER BY-klausul, noe som er en viktig fordel i forhold til IF-THEN-ELSIF, en konstruksjon som bare fungerer i PL/SQL-blokker.

En CASE-setning genererer unntaket CASE_NOT_FOUND hvis ingen grener samsvarer og ingen ELSE er tilstede. Å legge til en ELSE, selv en tom NULL-handling, unngår denne kjøretidsfeilen.

Ja. Når grenene sammenligner ett uttrykk med faste verdier, kan AI omskrive kjeden til et renere CASE. Bekreft resultatet, siden et CASE uten en ELSE oppfører seg annerledes enn et manglende ELSIF.

En CASE-setning kjører en handlingsblokk per gren og slutter med END CASE. Et CASE-uttrykk returnerer en enkelt verdi og slutter med END, slik at det kan tilordnes en variabel eller brukes i SQL.

Oppsummer dette innlegget med: