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.