Oracle PL/SQL IF THEN ELSE izjava: ELSIF, NESTED-IF

ล to su izjave o donoลกenju odluka?

Izjave o donoลกenju odluka su one koje ฤ‡e odluฤiti o kontroli tijeka SQL izjave temeljene na uvjetima. Programeru daje bolju kontrolu nad sprjeฤavanjem izvrลกavanja odreฤ‘enog koda (dijagram 1) ili odabirom ลพeljenog koda na temelju uvjeta (dijagram 2). Ispod je slikovni prikaz "Izjave o donoลกenju odluke".

Dijagram izjave o donoลกenju odluka
Dijagram izjave o donoลกenju odluka

Vrste izjava o donoลกenju odluka:

Oracle pruลพa sljedeฤ‡e vrste izjava o donoลกenju odluka.

  • AKO-ONDA
  • AKO-ONDA-INAฤŒE
  • AKO-ONDA-ELSIF
  • UGNJEลฝฤENO-AKO
  • Studije sluฤaja
  • PRETRAลฝENI SLUฤŒAJ

IF-THEN izjava

Naredba IF-THEN se uglavnom koristi za izvrลกavanje odreฤ‘enog dijela kodova samo kada je uvjet zadovoljen.

Stanje bi trebalo popustiti Booleova (toฤno/netoฤno). To je osnovna uvjetna izjava koja ฤ‡e omoguฤ‡iti ORACLE-u da izvrลกi/preskoฤi odreฤ‘eni dio koda na temelju unaprijed definiranih uvjeta.

Sintaksa za IF THEN izjave:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • U gornjoj sintaksi, kljuฤna rijeฤ 'IF' ฤ‡e biti popraฤ‡ena uvjetom koji daje vrijednost 'TRUE'/'FALSE'.
  • Kontrola ฤ‡e izvrลกiti samo ako se stanje vrati .
  • U sluฤaju uvjeta procjenjuje se na tada ฤ‡e SQL preskoฤiti , i poฤet ฤ‡e izvrลกavati kod pored bloka 'END IF'.

Biljeลกka: Kad god se uvjet procijeni na 'NULL', tada ฤ‡e SQL tretirati 'NULL' kao 'FALSE'.

Primjer 1: U ovom primjeru ฤ‡emo ispisati poruku kada je broj veฤ‡i od 100. Za to ฤ‡emo izvrลกiti sljedeฤ‡i kod

Za ispis poruke kada broj ima vrijednost veฤ‡u od 100, izvrลกavamo sljedeฤ‡i kod.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(โ€˜Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
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 '10'.
  • Redak koda 4: Ispis izjave โ€œProgram je pokrenutโ€.
  • Redak koda 5: Provjera uvjeta, je li varijabla 'a' veฤ‡a od '100.'
  • Redak koda 6: Ako je 'a' veฤ‡e od '100', tada ฤ‡e se ispisati "a je veฤ‡e od 100". Ako je 'a' manje od ili jednako 100, tada uvjet ne ispunjava, tako da se gornji iskaz za ispis zanemaruje.
  • Redak koda 8: Ispis izjave "Program dovrลกen".

Izlaz koda:

Program started.
Program completed.

Primjer 2: U ovom primjeru, ispisat ฤ‡emo poruku ako je zadana abeceda prisutna u engleskim samoglasnicima (A, E, I, O, U).

Za ispis poruke kada je dati znak samoglasnik, izvrลกavamo sljedeฤ‡i kod.

DECLARE 
a CHAR(1) :=โ€™uโ€™;
BEGIN
IF UPPER(a) in ('Aโ€™,'E','I','0','U' ) THEN 
dbms_output.put_line(โ€˜The character is in English Vowels');
END IF;
END;
/

Objaลกnjenje koda:

  • Redak koda 2: Deklaracija varijable 'a' kao 'CHAR' tipa podataka veliฤine '1' i njeno inicijaliziranje s vrijednoลกฤ‡u 'u'.
  • Redak koda 4: Provjera uvjeta, da li je varijabla 'a' prisutna u listi ('A','E','I','O','U').
  • Vrijednost 'a' pretvorena je u velika slova prije usporedbe kako bi usporedba bila neosjetljiva na velika i mala slova.
  • Redak koda 5: Ako je 'a' prisutan na popisu, tada ฤ‡e se ispisati izjava "Znak je u engleskim samoglasnicima". Ako uvjet nije uspio, tada ovaj program neฤ‡e dati nikakav izlaz, buduฤ‡i da izvan bloka IF-THEN nismo izdali nikakvu naredbu za ispis.

Izlaz koda:

The character is in English Vowels

Izjava IF-THEN-ELSE

  • Izjava IF-THEN-ELSE uglavnom se koristi za odabir izmeฤ‘u dvije alternative na temelju uvjeta.
  • Ispod je prikaz sintakse izjave IF-THEN-ELSE.

Sintaksa za izjave IF-THEN-ELSE:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • U gornjoj sintaksi, kljuฤna rijeฤ 'IF' ฤ‡e biti popraฤ‡ena uvjetom koji daje vrijednost 'TRUE'/'FALSE'.
  • Kontrola ฤ‡e izvrลกiti samo ako se stanje vrati .
  • U sluฤaju stanja procjenjuje na tada ฤ‡e se SQL izvrลกiti .
  • U svakom sluฤaju, izvrลกit ฤ‡e se jedan od dva akcijska bloka.

Biljeลกka: Kad god se uvjet ocijeni kao 'NULL', tada ฤ‡e SQL tretirati 'NULL' kao 'FALSE'.

Primjer 1: U ovom primjeru ispisat ฤ‡emo poruku bez obzira na to je li navedeni broj neparan ili paran.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (โ€˜Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
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 '11'.
  • Redak koda 4: Ispis izjave โ€œProgram je pokrenutโ€.
  • Redak koda 5: Provjera uvjeta je li modul varijable 'a' prema '2' jednak 0.
  • Redak koda 6: Ako je '0', tada ฤ‡e se ispisati "a je paran broj".
  • Redak koda 7: Ako vrijednost modula nije jednaka '0', tada se vraฤ‡a uvjet , pa ฤ‡e se ispisati poruka "a je neparan broj".
  • Redak koda10: Ispis izjave "Program dovrลกen"

Izlaz koda:

Program started.
a is odd number
Program completed.

Izjava IF-THEN-ELSIF

  • Izjava IF-THEN-ELSIF uglavnom se koristi kada treba izabrati jednu alternativu iz skupa alternativa, gdje svaka alternativa ima svoje uvjete koje treba zadovoljiti.
  • Prvi uvjeti koji se vraฤ‡aju ฤ‡e se izvrลกiti, a preostali uvjeti ฤ‡e biti preskoฤeni.
  • Izjava IF-THEN-ELSIF moลพe sadrลพavati blok 'ELSE' u sebi. Ovaj 'ELSE' blok ฤ‡e se izvrลกiti ako niti jedan od uvjeta nije zadovoljen.

biljeลกke: ELSE blok je neobavezan u ovoj uvjetnoj izjavi. Ako nema bloka ELSE i niti jedan od uvjeta nije zadovoljen, kontroler ฤ‡e preskoฤiti sve akcijske blokove i zapoฤeti s izvrลกavanjem preostalog dijela koda.

Sintaksa za IF-THEN-ELSIF izjave:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE โ€”optional 
<action_block_else>
END if;
  • U gornjoj sintaksi, kontrola ฤ‡e izvrลกiti samo ako se uvjet1 vrati .
  • Ako uvjet1 nije zadovoljen, regulator ฤ‡e provjeriti uvjet2.
  • Kontroler ฤ‡e izaฤ‡i iz IF-naredbe u sljedeฤ‡a dva sluฤaja.
    • Kada kontroler pronaฤ‘e bilo koji uvjet koji se vraฤ‡a . U tom sluฤaju, izvrลกit ฤ‡e se odgovarajuฤ‡i action_block i kontroler ฤ‡e izaฤ‡i iz ovog bloka IF-naredbe i zapoฤet ฤ‡e izvrลกavanje preostalog koda.
    • Kada niti jedan od uvjeta nije zadovoljen, then kontroler ฤ‡e izvrลกiti ELSE blok ako postoji, a zatim ฤ‡e izaฤ‡i iz IF-naredbe.

Biljeลกka: Kad god se uvjet ocijeni kao 'NULL', tada ฤ‡e SQL tretirati 'NULL' kao 'FALSE'.

Primjer 1: Bez bloka ELSE

U ovom primjeru ispisat ฤ‡emo ocjenu na temelju zadanih ocjena bez drugih uvjeta (oznaka >= 70 ocjena A, ocjena >=40 i ocjena <70 ocjena B, ocjena >=35 i ocjena <40 ocjena C).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(โ€˜Program started.โ€™ );
IF( mark >= 70) THEN 
dbms_output.put_line(โ€˜Grade Aโ€™);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(โ€˜Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(โ€˜Grade Cโ€™);
END IF;
dbms_output.put_line(โ€˜Program completed.โ€™); 
END;
/

Objaลกnjenje koda:

  • Redak koda 2: Deklaracija varijable 'oznaka' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednoลกฤ‡u '55'.
  • Redak koda 4: Ispis izjave โ€œProgram je pokrenutโ€.
  • Redak koda 5: Provjera uvjeta1, je li 'oznaka' veฤ‡a ili jednaka 70.
  • Redak koda 7: Buduฤ‡i da uvjet1 nije uspio, provjerava se uvjet2 '70>oznaka>=40โ€ฒ.
  • Redak koda 8: Condtition2 se vraฤ‡a , stoga ฤ‡e se ispisati poruka 'Ocjena B'.
  • Redak koda12: Ispis izjave "Program dovrลกen".
  • U ovom sluฤaju, uvjet3 'oznaka < 35' bit ฤ‡e preskoฤen, jer je kontroler pronaลกao jedan uvjet koji vraฤ‡a prije uvjeta3.

Izlaz koda:

Program started.
Grade B
Program completed.

Primjer 2: S blokom ELSE

U ovom primjeru ispisat ฤ‡emo ocjenu na temelju zadanih ocjena s drugim uvjetom (oznaka >= 70 ocjena A, ocjena >=40 i ocjena <70 ocjena B, ocjena >=35 i oznaka <40 ocjena C, inaฤe 'Bez ocjene').

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(โ€˜Program started.โ€™ );
IF( mark >= 70) THEN 
dbms_output.put_line(โ€˜Grade Aโ€™); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(โ€˜Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(โ€˜Grade C);
ELSE
dbms_output.put_line(โ€˜No Gradeโ€™);
END IF;
dbms_output.put_line(โ€˜Program completed.' ); 
END;
/

Objaลกnjenje koda:

  • Redak koda 2: Deklaracija varijable 'oznaka' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednoลกฤ‡u '25'.
  • Redak koda 4: Ispis izjave โ€œProgram je pokrenutโ€.
  • Redak koda 5: Provjera uvjeta 1, je li 'oznaka' veฤ‡a ili jednaka 70.
  • Redak koda 7: Buduฤ‡i da uvjet1 nije uspio, provjerava se uvjet2 '70>oznaka>=40โ€ฒ.
  • Redak koda 8: Buduฤ‡i da uvjet2 nije uspio, provjerava se uvjet3 '40>oznaka>=35โ€ฒ.
  • Redak koda 11: Buduฤ‡i da svi uvjeti nisu ispunjeni, kontrola ฤ‡e sada provjeriti prisutnost ELSE bloka i ispisati poruku 'No Grade' iz ELSE bloka.
  • Redak koda14: Ispis izjave "Program dovrลกen".

Izlaz koda:

Program started.
No Grade 
Program completed.

Naredba NESTED-IF

  • Naredba NESTED-IF u osnovi dopuลกta programerima da postave jedan ili viลกe 'IF' uvjeta unutar drugog 'IF' uvjeta osim normalnih izjava.
  • Svaki uvjet 'IF' treba imati zasebnu izjavu 'END IF' koja oznaฤava kraj opsega tog odreฤ‘enog .
  • Naredba 'IF' smatrat ฤ‡e najbliลพu naredbu 'END IF' krajnjom toฤkom za taj odreฤ‘eni uvjet.
  • Slikovni prikaz za NESTED-IF prikazan je ispod dijagrama.

Naredba NESTED-IF

Naredba NESTED-IF

IF <conditionl: returns Boolean>
THEN
	โ€”executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; โ€”END IF corresponds to condition2
<action_blockl ends>
END IF; โ€”END IF corresponds to condition1

Objaลกnjenje sintakse:

  • U gornjoj sintaksi, vanjski IF sadrลพi joลก jednu IF naredbu u svom akcijskom bloku.
  • Uvjet1 se vraฤ‡a , tada ฤ‡e se kontrola izvrลกiti i provjerava stanje1.
  • Ako se uvjet2 takoฤ‘er vrati , onda takoฤ‘er ฤ‡e se izvrลกiti.
  • U sluฤaju uvjeta2 procjenjuje se na tada ฤ‡e SQL preskoฤiti .

Ovdje ฤ‡emo vidjeti primjer ugnijeลพฤ‘enog Ifa โ€“

Primjer ugnijeลพฤ‘ene naredbe If: Najveฤ‡i od tri broja

U ovom primjeru ispisat ฤ‡emo najveฤ‡i od tri broja pomoฤ‡u izjave Nested-If. Brojevi ฤ‡e biti dodijeljeni u dijelu za deklaraciju, kao ลกto moลพete vidjeti u donjem kodu, tj. Broj= 10,15 i 20, a maksimalni broj ฤ‡e se dohvatiti koriลกtenjem ugnijeลพฤ‘enih if naredbi.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(โ€˜Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(โ€™Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(โ€˜A is greatestโ€™); 
	ELSE
	dbms_output.put_line(โ€˜C is greatestโ€™); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(โ€™B is greatest' ); 
	ELSE
	dbms_output.put_line(โ€™C is greatest' ); 
	END IF;
END IF;
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 '10'.
  • Redak koda 3: Deklaracija varijable 'b' kao tipa podataka 'BROJ' i njezino inicijaliziranje s vrijednoลกฤ‡u '15'.
  • Linija koda 4: Deklaracija varijable 'c' kao tipa podataka 'BROJ' i njeno inicijaliziranje s vrijednoลกฤ‡u '20'.
  • Redak koda 6: Ispis izjave โ€œProgram je pokrenutโ€ (redak 6).
  • Redak koda 7: Provjera uvjeta1, je li 'a' veฤ‡e od 'b' (redak 7).
  • Redak koda 10: Ako je 'a' veฤ‡i od 'b, tada ฤ‡e uvjet u 'nested-if 1' provjeriti je li 'a' veฤ‡i od 'c' (redak 10).
  • Redak koda 13: Ako je i dalje 'a' veฤ‡i, tada ฤ‡e se ispisati poruka 'A je najveฤ‡i' (redak 11). Inaฤe, ako uvjet2 ne uspije, tada ฤ‡e se ispisati 'C je najveฤ‡i' (redak 13).
  • Redak koda 18: U sluฤaju da uvjet1 vrati false, tada ฤ‡e uvjet u 'nested-if 2' provjeriti je li 'b' veฤ‡i od 'c' (redak 18).
  • Redak koda 21: Ako je 'b' veฤ‡e od 'c', tada ฤ‡e se ispisati poruka 'B je najveฤ‡i' (redak 19), inaฤe ako uvjet2 ne uspije, tada ฤ‡e se ispisati 'C je najveฤ‡i' (redak 21).
  • Redak koda 24: Ispis izjave โ€œProgram zavrลกenโ€ (redak 24).

Izlaz koda:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Rezime

U ovom poglavlju smo nauฤili razliฤite izjave za donoลกenje odluka i njihovu sintaksu i primjere. Donja tablica daje saลพetak razliฤitih uvjetnih izjava o kojima smo raspravljali.

TIP OPIS KORIล TENJE
AKO-ONDA Provjerava Booleov uvjet, ako je TRUE kod u bloku 'THEN' ฤ‡e se izvrลกiti. Za preskakanje/izvrลกenje odreฤ‘enog koda na temelju uvjeta.
AKO-ONDA-INAฤŒE Provjerava Booleov uvjet, ako ฤ‡e se izvrลกiti TRUE kod u bloku 'THEN', ako se izvrลกi pogreลกan kod u bloku 'ELSE'. Najprikladnije u stanju 'OVO-ILI-ONO'.
AKO-ONDA-ELSIF Provjerava Booleov uvjet redoslijedom. Izvrลกit ฤ‡e se prvi blok u nizu koji vraฤ‡a TRUE uvjet. Ako niti jedan od uvjeta u nizu nije TRUE, tada se izvrลกava kod u bloku 'ELSE'. Koristi se za odabir izmeฤ‘u viลกe od dvije moguฤ‡nosti uglavnom.
UGNJEลฝฤENO-AKO Dopuลกta jednu ili viลกe naredbi IF-THEN ili IF-THEN-ELSIF unutar druge naredbe IF-THEN ili IF-THEN-ELSIF. Uglavnom se koristi u situaciji ugnijeลพฤ‘enog stanja.

Saลพmite ovu objavu uz: