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

⚡ Pametni sažetak

PL/SQL naredbe za donošenje odluka kontroliraju koji se kod izvršava na temelju Booleovog uvjeta. Oracle pruža IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF i NESTED-IF, tako da program može preskočiti blok, birati između dva puta ili odabrati jednu alternativu od mnogih.

  • 🔀 Svrha: Uvjet koji vraća TRUE ili FALSE određuje tok izvršavanja.
  • AKO-ONDA: Pokreće blok samo kada je uvjet TRUE, inače ga preskače.
  • ↔️ AKO-ONDA-INAČIJE: Odabire između dva bloka, jednog za TRUE i jednog za FALSE.
  • 🪜 AKO-ONDA-ELSIF: Testira uvjete u nizu i pokreće prvi koji je TRUE, s opcionalnim ELSE.
  • 🧩 UGNJEŽENO-AKO: Postavlja IF unutar drugog IF-a za kombinirane uvjete.
  • ⚠️ NULL pravilo: Uvjet koji se evaluira kao NULL tretira se kao FALSE.
  • 🔚 terminator: Svaki IF mora biti zatvoren odgovarajućim END IF.

Oracle PL/SQL AKO ONDA INAČE ELSIF

Što su izjave o donošenju odluka?

Izjave o donošenju odluka određuju kontrolu toka SQL naredbe temeljene na uvjetima. One daju programeru bolju kontrolu nad sprječavanjem izvršavanja određenog bloka ili odabirom željenog bloka na temelju uvjeta. Ispod je slikovni prikaz naredbe za donošenje odluka.

Dijagram izjave o donošenju odluka
Dijagram izjave o donošenju odluka

Vrste izjava o donošenju odluka: Oracle nudi sljedeće vrste.

  • AKO-ONDA
  • AKO-ONDA-INAČE
  • AKO-ONDA-ELSIF
  • UGNJEŽĐENO-AKO
  • Studije slučaja
  • PRETRAŽENI SLUČAJ

Ovaj vodič pokriva IF varijante. CASE i pretraženi CASE oblici su obrađeni u PL/SQL CASE naredba vodič.

IF-THEN izjava

Naredba IF-THEN koristi se za izvršavanje određenog dijela koda samo kada je ispunjen uvjet. Uvjet bi trebao dati Booleova (Točno/Netočno) vrijednost. To je osnovna uvjetna izjava koja omogućuje Oracle izvršiti ili preskočiti dio koda na temelju unaprijed definiranog uvjeta.

Sintaksa za IF-THEN naredbe:

IF <condition: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block>
END IF;
  • U gornjoj sintaksi, ključnu riječ 'IF' prati uvjet koji se evaluira kao 'TRUE' ili 'FALSE'.
  • Kontrola izvršava samo ako se stanje vrati .
  • Ako se uvjet ocijeni kao , SQL preskače i počinje izvršavati kod nakon bloka 'END IF'.

Bilješka: Kad god se uvjet ocijeni kao 'NULL', SQL tretira 'NULL' kao 'FALSE'.

Primjer 1: U ovom primjeru ispisujemo poruku kada je broj veći od 100.

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;
/

Code Objašnjenje:

  • Code redak 2: Deklariranje varijable 'a' kao tipa podataka 'BROJ' i inicijalizacija s vrijednošću '10'.
  • Code redak 4: Ispis naredbe „Program pokrenut“.
  • Code redak 5: Provjera uvjeta, je li varijabla 'a' veća od '100'.
  • Code redak 6: Ako je 'a' veće od '100', tada se ispisuje „a je veće od 100“. Ako je 'a' manje ili jednako 100, uvjet ne uspijeva i naredba za ispis se zanemaruje.
  • Code redak 8: Ispis naredbe „Program završen“.

Code Izlaz:

Program started.
Program completed.

Primjer 2: U ovom primjeru ispisujemo poruku ako je zadano slovo engleski samoglasnik (A, E, I, O, U).

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

Code Objašnjenje:

  • Code redak 2: Deklarisanje varijable 'a' kao 'CHAR' veličine '1' i inicijalizacija s vrijednošću 'u'.
  • Code redak 4: Provjerava se je li varijabla 'a' prisutna na popisu ('A','E','I','O','U'). Vrijednost 'a' se pretvara u velika slova prije usporedbe kako bi usporedba bila neosjetljiva na velika i mala slova.
  • Code redak 5: Ako se 'a' nalazi na popisu, ispisuje se „Znak je u engleskim samoglasnicima“. Ako uvjet ne uspije, ovaj program ne daje izlaz jer nema naredbe za ispis izvan IF-THEN bloka.

Code Izlaz:

The character is in English Vowels

Izjava IF-THEN-ELSE

Naredba IF-THEN-ELSE koristi se za odabir između dvije alternative na temelju uvjeta. U nastavku je sintaksa.

Sintaksa za izjave IF-THEN-ELSE:

IF <condition: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block1>
ELSE
-execute if the condition failed (returns FALSE)
<action_block2>
END IF;
  • Ključnu riječ 'IF' prati uvjet koji se evaluira kao 'TRUE' ili 'FALSE'.
  • Kontrola se izvršava samo ako se stanje vrati .
  • Ako se uvjet ocijeni kao , SQL se izvršava .
  • U svakom slučaju, izvršava se jedan od dva bloka akcija.

Bilješka: Kad god se uvjet ocijeni kao 'NULL', SQL tretira 'NULL' kao 'FALSE'.

Primjer 1: U ovom primjeru ispisujemo je li zadani broj paran ili neparan.

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 number');
END IF;
dbms_output.put_line ('Program completed.');
END;
/

Code Objašnjenje:

  • Code redak 2: Deklariranje varijable 'a' kao tipa podataka 'BROJ' i inicijalizacija s vrijednošću '11'.
  • Code redak 4: Ispis naredbe „Program pokrenut“.
  • Code redak 5: Provjera je li modul varijable 'a' pomoću '2' jednak 0.
  • Code redak 6: Ako je '0', tada se ispisuje „a je paran broj“.
  • Code redak 7: Ako vrijednost modula nije jednaka '0', uvjet vraća , pa se ispisuje „a je neparan broj“.
  • Code redak 10: Ispis naredbe „Program završen“.

Code Izlaz:

Program started.
a is odd number
Program completed.

Izjava IF-THEN-ELSIF

  • Naredba IF-THEN-ELSIF koristi se tamo gdje treba odabrati jednu alternativu iz skupa alternativa, gdje svaka alternativa ima svoj uvjet.
  • Prvi uvjet koji vraća se izvršava, a preostali uvjeti se preskaču.
  • Naredba IF-THEN-ELSIF može sadržavati blok 'ELSE' koji se izvršava ako nijedan uvjet nije ispunjen.

Bilješka: ELSE blok je opcionalan. Ako nema ELSE bloka i nijedan uvjet nije zadovoljen, kontroler preskače sve akcijske blokove i izvršava preostali kod.

Sintaksa za IF-THEN-ELSIF izjave:

IF <condition1: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block1>
ELSIF <condition2: returns Boolean> THEN
<action_block2>
ELSIF <condition3: returns Boolean> THEN
<action_block3>
ELSE --optional
<action_block_else>
END IF;
  • Kontrola se izvršava samo ako uvjet1 vrati .
  • Ako uvjet1 nije zadovoljen, kontroler provjerava uvjet2 i tako dalje.
  • Kontroler izlazi iz IF naredbe kada pronađe uvjet koji vraća i pokreće odgovarajući blok akcije ili kada nijedan nije zadovoljen i pokreće se ELSE blok (ako postoji).

Bilješka: Kad god se uvjet ocijeni kao 'NULL', SQL tretira 'NULL' kao 'FALSE'.

Primjer 1: Bez ELSE bloka. U ovom primjeru ispisujemo ocjenu na temelju zadanih ocjena bez uvjeta else (ocjena >= 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;
/

Code Objašnjenje:

  • Code redak 2: Deklarisanje varijable 'mark' kao tipa podataka 'NUMBER' i inicijalizacija s vrijednošću '55'.
  • Code redak 4: Ispis naredbe „Program pokrenut“.
  • Code redak 5: Provjera uvjeta1, je li 'mark' veći ili jednak 70.
  • Code redak 7: Budući da uvjet1 nije uspio, provjerava se uvjet2 '70 > oznaka >= 40'.
  • Code redak 8: Uvjet2 vraća , pa se ispisuje poruka 'Ocjena B'.
  • Code redak 12: Ispis naredbe „Program završen“. Uvjet3 'oznaka < 35' se preskače jer je uvjet TRUE već pronađen.

Code Izlaz:

Program started.
Grade B
Program completed.

Primjer 2: S ELSE blokom. U ovom primjeru ispisujemo ocjenu na temelju zadanih ocjena s uvjetom else (ocjena >= 70 Ocjena A, ocjena >= 40 i ocjena < 70 Ocjena B, ocjena >= 35 i ocjena < 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;
/

Code Objašnjenje:

  • Code redak 2: Deklarisanje varijable 'mark' kao tipa podataka 'NUMBER' i inicijalizacija s vrijednošću '25'.
  • Code redak 4: Ispis naredbe „Program pokrenut“.
  • Code redak 5: Provjera uvjeta1, je li 'mark' veći ili jednak 70.
  • Code redak 7: Budući da uvjet1 nije uspio, provjerava se uvjet2 '70 > oznaka >= 40'.
  • Code redak 9: Budući da uvjet2 nije uspio, provjerava se uvjet3 '40 > oznaka >= 35'.
  • Code redak 11: Budući da svi uvjeti nisu ispunjeni, kontrola provjerava ELSE blok i ispisuje 'Nema ocjene'.
  • Code redak 14: Ispis naredbe „Program završen“.

Code Izlaz:

Program started.
No Grade
Program completed.

Naredba NESTED-IF

  • Naredba NESTED-IF omogućuje programerima da postave jedan ili više 'IF' uvjeta unutar drugog 'IF' uvjeta. .
  • Svaki 'IF' uvjet treba imati zasebnu naredbu 'END IF', koja označava kraj opsega tog određenog uvjeta. .
  • Naredba 'IF' smatra najbliži 'END IF' krajnjom točkom za taj uvjet.
  • Slikovni prikaz za NESTED-IF prikazan je u nastavku.

Ugniježđeni tok IF naredbi

Ugniježđena struktura IF naredbe

IF <condition1: 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_block1 ends>
END IF; --END IF corresponds to condition1

Objašnjenje sintakse:

  • Vanjski IF sadrži još jednu IF naredbu u svom bloku akcija.
  • Ako se uvjet1 vrati , kontrola izvršava i provjerava uvjet2.
  • Ako uvjet2 također vrati , zatim također se izvršava.
  • Ako se uvjet2 ocijeni kao , SQL preskače .

Primjer ugniježđene IF naredbe: Najveći od tri broja. U ovom primjeru ispisujemo najveći od tri broja pomoću ugniježđene if naredbe. Brojevi se dodjeljuju u dijelu deklariranja (Broj = 10, 15 i 20), a maksimalni se dohvaća pomoću 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 1 */
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;
/

Code Objašnjenje:

  • Code redak 2-4: Deklariranje varijabli 'a', 'b' i 'c' kao 'BROJ' i njihova inicijalizacija s 10, 15 i 20.
  • Code redak 6: Ispis naredbe „Program pokrenut“.
  • Code redak 7: Provjera uvjeta1, je li 'a' veći od 'b'.
  • Code redak 10: Ako je 'a' veći od 'b', ugniježđeni if ​​1 provjerava je li 'a' veći od 'c'.
  • Code redak 11-13: Ako je 'a' i dalje veći, ispisuje se 'A je najveći'; inače se ispisuje 'C je najveći'.
  • Code redak 18: Ako uvjet1 vrati false, nested-if 2 provjerava je li 'b' veći od 'c'.
  • Code redak 19-21: Ako je 'b' veći od 'c', ispisuje se 'B je najveći'; inače se ispisuje 'C je najveći'.
  • Code redak 24: Ispis naredbe „Program završen“.

Izlaz koda:

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

Usporedba izjava o donošenju odluka

Donja tablica sažima različite uvjetne izjave o kojima se raspravljalo, tako da se za određenu situaciju može odabrati prava.

Tip Description Upotreba
AKO-ONDA Provjerava Booleov uvjet; ako je TRUE, izvršava se kod u bloku 'THEN'. Preskočiti ili izvršiti određeni blok na temelju uvjeta.
AKO-ONDA-INAČE Provjerava Booleov uvjet; ako je TRUE, izvršava se blok 'THEN', ako je FALSE, izvršava se blok 'ELSE'. Najprikladnije u stanju 'ovo ili ono'.
AKO-ONDA-ELSIF Provjerava uvjete u nizu. Izvršava se prvi blok koji vraća TRUE. Ako nijedan nije TRUE, izvršava se blok 'ELSE'. Koristi se za odabir između više od dvije alternative.
UGNJEŽĐENO-AKO Omogućuje jednu ili više IF-THEN ili IF-THEN-ELSIF naredbi unutar druge. Uglavnom se koristi u ugniježđenim uvjetima.

Pitanja i odgovori

ELSIF testira ravni niz međusobno isključivih uvjeta. Ugniježđeni IF stavlja jedan uvjet unutar drugog, tako da se unutarnji test izvršava tek nakon što je vanjski već TRUE.

Uvjet koji se evaluira kao NULL tretira se kao FALSE, pa se njegov THEN blok preskače. To je važno kada uspoređena vrijednost može biti null, jer se grana neće pokrenuti kako bi početnik očekivao.

CASE je jasniji kada se jedan izraz uspoređuje s mnogo fiksnih vrijednosti. IF-THEN-ELSIF odgovara nepovezanim uvjetima raspona. Oba mogu izraziti istu logiku, ali CASE se bolje čita za podudaranje vrijednosti.

Da. AI može izravnati ugniježđene IF-ove u ELSIF lanac ili CASE i uočiti uvjete koji se nikada ne mogu dosegnuti. Testirajte prepisivanje, jer preuređenje uvjeta može promijeniti koja se grana izvršava.

END IF označava gdje se uvjetni blok završava, što je bitno kada su IF-ovi ugniježđeni. Bez njega, kompajler ne može utvrditi koje naredbe pripadaju uvjetu i izbacuje grešku.

Sažmite ovu objavu uz: