Izjava CASE u Oracle PL/SQL s primjerima

โšก Pametni saลพetak

PL/SQL CASE naredba odabire jednu alternativu od nekoliko na temelju selektora, sliฤno kao IF-THEN-ELSIF, ali jasnije. Jednostavna CASE naredba pronalazi vrijednost selektora, dok pretraลพivana CASE naredba procjenjuje uvjet u svakoj WHEN klauzuli i pokreฤ‡e prvu koja je istinita.

  • ๐Ÿ”€ Svrha: CASE bira jedan akcijski blok od mnogih, koristeฤ‡i selektor umjesto Booleovog lanca.
  • ๐ŸŽฏ Selektor: Izraz CASE se procjenjuje jednom i usporeฤ‘uje sa svakom WHEN vrijednoลกฤ‡u.
  • ๐Ÿ”Ž Pretraลพeni SLUฤŒAJ: Stavlja puni uvjet u svaku WHEN klauzulu i pokreฤ‡e prvi koji je istinit.
  • ๐Ÿงฎ Bilo koja vrsta: Selektor moลพe biti varijabla, broj ili aritmetiฤki izraz.
  • ๐Ÿ›Ÿ DRUGO: Neobavezni ELSE blok se izvrลกava kada nema podudaranja.
  • ๐Ÿ”š KRAJ SLUฤŒAJA: Obavezni END CASE zatvara naredbu.
  • ๐Ÿ—„๏ธ SQL prilagoฤ‘eno: Za razliku od IF, CASE se moลพe koristiti i izravno unutar SQL naredbi.

Izjava CASE u Oracle PL / SQL

ล to je CASE izjava?

Naredba CASE sliฤna je naredbi IF-THEN-ELSIF; odabire jednu alternativu na temelju uvjeta iz dostupnih opcija.

  • CASE naredba koristi "selektor" umjesto Booleovog izraza za odabir niza.
  • Vrijednost izraza u CASE naredbi tretira se kao selektor.
  • Izraz moลพe biti bilo kojeg tipa (aritmetiฤki, varijabli itd.).
  • Svakoj alternativi dodjeljuje se odreฤ‘ena unaprijed definirana vrijednost (selektor), a izvrลกava se alternativa ฤija vrijednost selektora odgovara vrijednosti uvjetnog izraza.
  • Za razliku od IF-THEN-ELSIF, naredba CASE takoฤ‘er se moลพe koristiti u SQL naredbama.
  • Blok ELSE u naredbi CASE sadrลพi niz koji ฤ‡e se izvrลกiti kada nijedna alternativa nije odabrana.

Sintaksa

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • U gornjoj sintaksi, izraz vraฤ‡a vrijednost koja moลพe biti bilo kojeg tipa.
  • Svaka klauzula 'WHEN' je alternativa koja ima i jedan .
  • Odabrana je klauzula 'WHEN' ฤija vrijednost odgovara izrazu i njezina se izvrลกava.
  • Blok 'ELSE' je opcionalan i sadrลพi izvrลกiti kada nema odgovarajuฤ‡e alternative.
  • 'END' oznaฤava kraj naredbe CASE i obvezni je dio naredbe CASE.

Primjer 1: Aritmetiฤki izraฤun koriลกtenjem CASE-a

U ovom primjeru radimo aritmetiฤki izraฤun izmeฤ‘u dva broja, 55 i 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 Objaลกnjenje

  • Code redak 2: Deklarisanje varijable 'a' kao 'BROJ' i inicijalizacija s vrijednoลกฤ‡u '55'.
  • Code redak 3: Deklarisanje varijable 'b' kao 'BROJ' i inicijalizacija s vrijednoลกฤ‡u '5'.
  • Code redak 4: Deklarisanje varijable 'arth_operation' kao 'VARCHAR2' veliฤine 20 i inicijalizacija s vrijednoลกฤ‡u 'MULTIPLY'.
  • Code redak 6: Ispis naredbe โ€žProgram pokrenutโ€œ.
  • Code redak 7: CASE provjerava vrijednost izraza. Ovdje je vrijednost 'arth_operation' 'MULTIPLY', ลกto se tretira kao selektor.
  • Code redak 10: WHEN klauzula s vrijednoลกฤ‡u 'MULTIPLY' odgovara selektoru, pa kontroler odabire ovaj blok akcije i ispisuje 'Mnoลพenje brojeva je: 275'.
  • Code redak 13: Oznaฤava kraj naredbe CASE.
  • Code redak 14: Ispis naredbe โ€žProgram zavrลกenโ€œ.

Code Izlaz

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

PRETRAลฝENI PADEลฝ Izjava

Pretraลพena CASE naredba sliฤna je CASE naredbi, ali umjesto koriลกtenja selektora za odabir alternative, pretraลพeni CASE ima uvjet definiran izravno u WHEN klauzuli.

  • Izvrลกava se prva WHEN klauzula koja zadovoljava uvjet, a kontroler preskaฤe preostale alternative.

Sintaksa

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • U gornjoj sintaksi, svaka WHEN klauzula ima zasebnu i .
  • Izvrลกava se WHEN klauzula za koju izraz vraฤ‡a TRUE.
  • Blok 'ELSE' je opcionalan i sadrลพi izvrลกiti kada nijedna alternativa nije zadovoljena.
  • 'END' oznaฤava kraj naredbe CASE i obvezni je dio naredbe CASE.

Primjer 1: Aritmetiฤki izraฤun koriลกtenjem pretraลพenog CASE-a

U ovom primjeru radimo aritmetiฤki izraฤun izmeฤ‘u dva broja, 55 i 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 Objaลกnjenje

  • Code redak 2: Deklarisanje varijable 'a' kao 'BROJ' i inicijalizacija s vrijednoลกฤ‡u '55'.
  • Code redak 3: Deklarisanje varijable 'b' kao 'BROJ' i inicijalizacija s vrijednoลกฤ‡u '5'.
  • Code redak 4: Deklarisanje varijable 'arth_operation' kao 'VARCHAR2' veliฤine 20 i inicijalizacija s vrijednoลกฤ‡u 'DIVIDE'.
  • Code redak 6: Ispis naredbe โ€žProgram pokrenutโ€œ.
  • Code redak 7: Poฤinje traลพena CASE naredba. Klauzule za ADD, SUBTRACT i MULTIPLY se preskaฤu jer njihovi uvjeti ne odgovaraju vrijednosti 'arth_operation'.
  • Code redak 14: Izraz WHEN klauzule โ€žarth_operation = 'DIVIDE'โ€ je zadovoljen i vraฤ‡a TRUE.
  • Code redak 15: Izvrลกava se blok radnji klauzule WHEN i ispisuje se 'Dijeljenje brojeva je: 11'.
  • Code redak 17: Oznaฤava kraj naredbe CASE.
  • Code redak 18: Ispis naredbe โ€žProgram zavrลกenโ€œ.

Code Izlaz

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

Usporedba SLUฤŒAJA i PRETRAลฝENOG SLUฤŒAJA

Oba oblika biraju jednu granu, ali se razlikuju u naฤinu odabira grane, kao ลกto je saลพeto u nastavku.

Tip Description Upotreba
Studije sluฤaja Sliฤno kao i AKO-ONDA-ELSIF izjava. Za odabir alternative koristi se 'selektor' umjesto logiฤkog izraza. Koristi se za odabir izmeฤ‘u nekoliko alternativa pomoฤ‡u selektora.
PRETRAลฝENI SLUฤŒAJ Naredba CASE bez stvarnog selektora. Umjesto toga, sadrลพi uvjet (koji se evaluira kao TRUE ili FALSE) koji odabire alternativu. Koristi se za odabir izmeฤ‘u viลกe od dvije alternative, uglavnom s uvjetima raspona.

Pitanja i odgovori

Jednostavni CASE usporeฤ‘uje jednu vrijednost selektora sa svakom WHEN vrijednoลกฤ‡u. Pretraลพeni CASE nema selektor i procjenjuje puni uvjet u svakom WHEN-u, pa stoga obraฤ‘uje raspone i sloลพene testove.

Da. Izraz CASE moลพe se pojaviti u klauzuli SELECT, WHERE ili ORDER BY, ลกto je kljuฤna prednost u odnosu na IF-THEN-ELSIF, konstrukciju koja radi samo unutar PL/SQL blokova.

Naredba CASE pokreฤ‡e iznimku CASE_NOT_FOUND ako se ne podudara nijedna grana i nije prisutan ELSE. Dodavanje naredbe ELSE, ฤak i prazne NULL akcije, izbjegava ovu pogreลกku tijekom izvoฤ‘enja.

Da. Kada grane usporeฤ‘uju jedan izraz s fiksnim vrijednostima, umjetna inteligencija moลพe prepisati lanac kao ฤiลกฤ‡i CASE. Provjerite rezultat, buduฤ‡i da se CASE bez ELSE ponaลกa drugaฤije od nedostajuฤ‡eg ELSIF-a.

Naredba CASE pokreฤ‡e blok akcije po grani i zavrลกava s END CASE. Izraz CASE vraฤ‡a jednu vrijednost i zavrลกava s END, tako da se moลพe dodijeliti varijabli ili koristiti u SQL-u.

Saลพmite ovu objavu uz: