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.

ล 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. |
