Izjava CASE u Oracle PL/SQL s primjerima
Što je naredba CASE?
Naredba CASE slična je naredbi IF-THEN-ELSIF koja odabire jednu alternativu na temelju uvjeta iz dostupnih opcija.
- Izjava CASE koristi "selektor" umjesto Booleovog izraza za odabir niza.
- Vrijednost izraza u naredbi CASE tretirat će se kao selektor.
- Izraz može biti bilo koje vrste (aritmetika, varijable, itd.)
- Svakoj se alternativi dodjeljuje određena unaprijed definirana vrijednost (selektor), a alternativa s vrijednošću selektora koja odgovara vrijednosti uvjetnog izraza bit će izvršena.
- Za razliku od IF-THEN-ELSIF, naredba CASE također se može koristiti u SQL naredbama.
- Blok ELSE u naredbi CASE sadrži sekvencu koju je potrebno izvršiti kada nije odabrana nijedna od alternativa.
Sintaksa
CASE (expression) WHEN <valuel> THEN action_blockl; WHEN <value2> THEN action_block2; WHEN <value3> THEN action_block3; ELSE action_block_default; END CASE;
- U gornjoj sintaksi, izraz će vratiti vrijednost koja može biti bilo koje vrste (varijabla, broj itd.).
- Svaka klauzula 'WHEN' tretira se kao alternativa koja ima i .
- Bit će odabrana klauzula 'WHEN' koja odgovara vrijednosti izraza i odgovarajuća bit će izvršena.
- Blok 'ELSE' nije obavezan koji sadrži koji treba izvršiti kada nijedna od alternativa ne odgovara vrijednosti izraza.
- 'END' označava kraj naredbe CASE i obavezan je dio naredbe CASE.
Primjer 1: Aritmetičko računanje korištenjem velikih i malih slova
U ovom primjeru izvršit ćemo 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; /
Objašnjenje koda
- Redak koda 2: Deklaracija varijable 'a' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednošću '55'.
- Redak koda 3: Deklaracija varijable 'b' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednošću '5.'
- Redak koda 4: Deklaracija varijable 'arth_operation' kao tipa podataka 'VARCHAR2' veličine 20 i njeno inicijaliziranje s vrijednošću 'MULTIPLY'.
- Redak koda 6: Ispis izjave “Program je pokrenut”.
- Linija koda 7: CASE provjerava vrijednost izraza. U ovom slučaju, vrijednost varijable 'arth_operation' je 'MULTIPLY'. Ova vrijednost će se sada tretirati kao selektor za ovaj CASE izraz.
- Redak koda 10: klauzula WHEN s vrijednošću 'MULTIPLY' odgovara vrijednosti selektora, stoga će kontroler odabrati ovaj action_block i ispisati poruku 'Množenje brojeva je: 275'.
- Linija koda 13: Označava kraj naredbe CASE.
- Redak koda14: Ispis izjave "Program dovršen".
Izlaz koda
Program started. Multiplication of the numbers are: 275 Program completed.
PRETRAŽENI PADEŽ Izjava
Izjava SEARCHED CASE slična je naredbi CASE, umjesto korištenja selektora za odabir alternative, SEARCHED CASE će izravno imati izraz definiran u klauzuli WHEN.
- Prva WHEN klauzula koja zadovoljava uvjet bit će izvršena, a kontroler će preskočiti preostale alternative.
Sintaksa
CASE WHEN <expression1> THEN action_blockl; WHEN <expression2> THEN action_block2; WHEN <expression3> THEN action_block3; ELSE action_block_default; END CASE;
- U gornjoj sintaksi, svaka WHEN klauzula ima zaseban i .
- Izvršit će se klauzula WHEN za koju izraz vraća TRUE.
- Blok 'ELSE' nije obavezan koji sadrži koje je potrebno izvršiti kada nijedna od alternativa ne zadovoljava.
- 'END' označava kraj CASE naredbe i obavezan je dio CASE.
Primjer 1: Aritmetičko izračunavanje pomoću traženih malih i malih slova
U ovom primjeru izvršit ćemo 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; /
Objašnjenje koda
- Redak koda 2: Deklaracija varijable 'a' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednošću '55'.
- Redak koda 3: Deklaracija varijable 'b' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednošću '5'.
- Redak koda 4: Deklaracija varijable 'arth_operation' kao tipa podataka 'VARCHAR2' veličine 20 i njeno inicijaliziranje s vrijednošću 'DIVIDE'.
- Redak koda 6: Ispis izjave “Program je pokrenut”.
- Redak koda 7: počinje naredba SEARCHED CASE. Kôd od retka 8 do retka 13 je preskočen jer njihova vrijednost selektora (ADD, SUBTRACT, MULTIPLY) ne odgovara vrijednosti 'arth_operation'.
- Red koda 14: izraz WHEN klauzule “arth_operation = 'DIVIDE'” zadovoljen i izraz vraća TRUE.
- Redak koda 15: Action_block klauzule WHEN će se izvršiti i ispisati će se poruka 'Dijeljenje brojeva je: 11'.
- Kodna linija 17: Označava kraj CASE izjave.
- Redak koda 18: Ispis izjave "Program dovršen".
Izlaz koda
Program started. Division of the numbers are: 11 Program completed.
rezime
TIP | OPIS | KORIŠTENJE |
---|---|---|
SLUČAJ | Slično AKO-ONDA-ELSIF izjava. 'SELECTOR' se koristi za odabir alternativa umjesto Boolean izraza. | Koristi se za odabir između nekoliko alternativa pomoću 'SELECTOR' |
PRETRAŽENI SLUČAJ | CASE izjava bez stvarnog 'SELECTOR'. Umjesto toga, sadrži stvarni uvjet (koji se procjenjuje na TRUE/FALSE) koji će odabrati alternative. | Koristi se za odabir između više od dvije mogućnosti uglavnom. |