Oracle PL / SQL AKO JE ONDA DRUGO Izjava: ELSIF, NESTED-IF

Sadržaj:

Anonim

Što su izjave o donošenju odluka?

Izjave za donošenje odluka su oni koji će odlučiti o kontroli protoka SQL izraza na temelju uvjeta. To programeru daje bolju kontrolu sprečavanja izvršenja određenog koda (dijagram 1) ili odabira željenog koda na temelju stanja (dijagram 2). Ispod je slikoviti prikaz "Izjave o donošenju odluka".

Dijagram donošenja odluka

Vrste izjava za donošenje odluka:

Oracle pruža sljedeće vrste izjava za donošenje odluka.

  • AKO TADA
  • AKO-ONDA-OSTALO
  • AKO-ONDA-ELSIF
  • GNJESTO-AKO
  • SLUČAJ
  • PRETRAŽENI SLUČAJ

U ovom vodiču naučit ćete-

  • Uvod u izjave o donošenju odluka
  • AKO-ONDA Izjava
  • AKO-ONDA-OSTALO Izjava
  • IF-THEN-ELSIF Izjava
  • Izjava NESTED-IF

AKO-ONDA Izjava

Izraz IF-THEN uglavnom se koristi za izvršavanje određenog odjeljka kodova samo kada je uvjet zadovoljen.

Uvjet bi trebao dati Boolean (True / False). To je osnovna uvjetna izjava koja će ORACLE-u omogućiti izvršavanje / preskakanje određenog dijela koda na temelju unaprijed definiranih uvjeta.

Sintaksa za izjave IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • U gornjoj sintaksi, ključnu riječ 'IF' slijedit će uvjet koji procjenjuje na 'TRUE' / 'FALSE'.
  • Kontrola će izvršiti samo ako uvjet vrati .
  • U slučaju da uvjet procijeni na , tada će SQL preskočiti i započet će izvršavanje koda pored bloka 'END IF'.

Napomena: Kad god se uvjet procijeni na 'NULL', tada će SQL 'NULL' tretirati kao 'FALSE'.

Primjer 1 : U ovom primjeru ispisat ćemo poruku kada je broj veći od 100. Za to ćemo izvršiti sljedeći kod

Da bismo ispisali poruku kada broj ima vrijednost veću od 100, izvršavamo sljedeći kôd.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Objašnjenje koda:

  • Redak koda 2: Proglašavanje varijable "a" tipom podataka "BROJ" i inicijalizacija vrijednosti "10".
  • Redak koda 4: Ispis izjave "Program je pokrenut".
  • Redak koda 5: Provjera stanja je li varijabla "a" veća od "100".
  • Redak 6: Ako je 'a' veće od '100', ispisat će se 'a veće od 100'. Ako je 'a' manje ili jednako 100, tada uvjet ne uspije, pa se gornji ispis zanemaruje.
  • Redak koda 8: Ispis izjave "Program završ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).

Da bismo ispisali poruku kada je zadani znak samoglasnik, izvršavamo sljedeći kod.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_output.put_line(‘The character is in English Vowels');END IF;END;/

Objašnjenje koda:

  • Redak koda 2: Deklariranje varijable "a" kao "CHAR" tipa podataka veličine "1" i inicijalizacija s vrijednošću "u".
  • Redak koda 4: Provjera stanja je li na popisu prisutna varijabla 'a' ('A', 'E', 'I', 'O', 'U').
  • Vrijednost 'a' pretvorena je u velika slova prije uspoređivanja kako bi se usporedilo ne razlikuje velika i mala slova.
  • Redak koda 5: Ako je na popisu prisutno 'a', tada će se ispisati izjava "Lik je u engleskim samoglasnicima". Ako uvjet nije uspio, tada ovaj program neće dati izlaz, jer izvan bloka IF-THEN nismo izdali izjavu za ispis.

Izlaz koda:

The character is in English Vowels

AKO-ONDA-OSTALO Izjava

  • Izjava IF-THEN-ELSE uglavnom se koristi za odabir između dvije alternative na temelju stanja.
  • Ispod je sintaksni prikaz izraza IF-THEN-ELSE.

Sintaksa za izjave IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • U gornjoj sintaksi, ključnu riječ 'IF' slijedit će uvjet koji procjenjuje na 'TRUE' / 'FALSE'.
  • Kontrola će izvršiti samo ako uvjet vrati .
  • U slučaju da stanje procijeni na , tada će SQL izvršiti .
  • U svakom slučaju, izvršit će se jedan od dva akcijska bloka.

Napomena: Kad god se uvjet procijeni na 'NULL', tada će SQL 'NULL' tretirati kao 'FALSE'.

Primjer 1 : U ovom ćemo primjeru ispisati poruku je li zadani broj neparan ili paran.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Objašnjenje koda:

  • Redak koda 2: Proglašavanje varijable 'a' tipom podataka 'BROJ' i inicijalizacija vrijednošću '11'.
  • Redak koda 4: Ispis izjave "Program je pokrenut".
  • Redak koda 5: Provjera stanja je li modul varijable 'a' prema '2' 0.
  • 6. redak koda: Ako je '0', tada će se ispisati "a je paran broj".
  • Redak koda 7: Ako vrijednost modula nije jednaka '0', tada uvjet vraća , pa će se ispisati poruka "a je neparan broj".
  • Šifra 10: Ispis izjave "Program završen"

Izlaz koda:

Program started.a is odd numberProgram completed. 

IF-THEN-ELSIF Izjava

  • Izjava IF-THEN-ELSIF uglavnom se koristi tamo gdje treba odabrati jednu alternativu iz niza alternativa, gdje svaka alternativa ima svoje uvjete koje treba zadovoljiti.
  • Izvršit će se prvi uvjeti koji vrate , a ostali uvjeti će se preskočiti.
  • Izjava IF-THEN-ELSIF može u sebi sadržavati blok 'ELSE'. Ovaj 'ELSE' blok izvršit će se ako nije zadovoljen niti jedan od uvjeta.

Napomena : ELSE blok nije obavezan u ovom uvjetnom izrazu. Ako nema ELSE bloka i nijedan od uvjeta nije zadovoljen, tada će kontroler preskočiti sav akcijski blok i započeti izvršavanje preostalog dijela koda.

Sintaksa za izjave IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • U gornjoj sintaksi, kontrola će izvršiti samo ako uvjet1 vrati .
  • Ako uvjet1 nije zadovoljen, tada će kontroler provjeriti stanje2.
  • Upravljač će izaći iz IF-izjave u sljedeća dva slučaja.
    • Kada je kontroler pronašao bilo koji uvjet koji vraća . U tom će se slučaju izvršiti odgovarajući blok_akcije i kontroler će izaći iz ovog bloka IF-naredbi i započet će izvršavanje preostalog koda.
    • Kada nijedan od uvjeta nije zadovoljen, tadašnji kontroler će izvršiti ELSE blok ako je prisutan, a zatim će izaći iz IF-izjave.

Napomena: Kad god se uvjet procijeni na 'NULL', tada će SQL 'NULL' tretirati kao 'FALSE'.

Primjer 1: Bez ELSE bloka

U ovom ćemo primjeru ispisati ocjenu na temelju zadanih ocjena bez drugog uvjeta (oznaka> = 70 ocjena A, ocjena> = 40 i oznaka <70 ocjena B, ocjena> = 35 i oznaka <40 ocjena C).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C’);END IF;dbms_output.put_line(‘Program completed.’);END;/

Objašnjenje koda:

  • Redak koda 2: Proglašavanje varijable 'oznaka' tipom podataka 'BROJ' i inicijalizacija vrijednošću '55'.
  • Redak koda 4: Ispis izjave "Program je pokrenut".
  • Redak koda 5: Provjera stanja1, je li 'oznaka' veća ili jednaka 70.
  • Redak koda 7: Budući da uvjet1 nije uspio, tada se provjerava uvjet2 '70> oznaka> = 40 '.
  • Redak koda 8: Uvjet2 vraća , stoga će se ispisati poruka 'Ocjena B'.
  • Redak koda12: Ispis izjave "Program završen".
  • U tom slučaju preskočit će se oznaka '3 <35', jer je kontroler pronašao jedan uvjet koji vraća prije stanja3.

Izlaz koda:

Program started.Grade BProgram completed.

Primjer 2 : S ELSE blokom

U ovom primjeru ispisat ćemo ocjenu na temelju zadanih ocjena s uvjetom else (ocjena> = 70 ocjena A, ocjena> = 40 i oznaka <70 ocjena B, ocjena> = 35 i oznaka <40 ocjena C, ostalo 'Bez ocjene').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_output.put_line(‘No Grade’);END IF;dbms_output.put_line(‘Program completed.' );END;/

Objašnjenje koda:

  • Redak koda 2: Deklariranje varijable 'oznaka' kao tip podataka 'BROJ' i inicijalizacija vrijednosti '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, tada se provjerava uvjet2 '70> oznaka> = 40 '.
  • Redak koda 8: Budući da uvjet2 nije uspio, tada se provjerava uvjet3 '40> oznaka> = 35 '.
  • Linijska oznaka 11: Budući da nisu ispunjeni svi uvjeti, kontrola će sada provjeriti prisutnost ELSE bloka i ispisat će poruku 'Nema ocjene' iz ELSE bloka.
  • Redak koda 14: Ispis izjave "Program završen".

Izlaz koda:

Program started.No GradeProgram completed.

Izjava NESTED-IF

  • Izraz NESTED-IF u osnovi dopušta programerima da smjeste jedan ili više uvjeta "IF" unutar drugog uvjeta "IF" koji nisu uobičajeni.
  • Svaki uvjet "IF" trebao bi imati zasebnu izjavu "END IF" koja označava kraj opsega tog određenog .
  • Izraz 'IF' smatrat će najbliži izraz 'END IF' krajnjom točkom za taj određeni uvjet.
  • Slikovni prikaz za NESTED-IF prikazan je ispod dijagrama.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Objašnjenje sintakse:
  • U gornjoj sintaksi, vanjski IF sadrži još jedan izraz IF u svom bloku akcije.
  • Uvjet1 vraća , tada će kontrola izvršiti i provjeriti uvjet2.
  • Ako uvjet2 vrati i , tada će se izvršiti i .
  • U slučaju da uvjet2 ima vrijednost , tada će SQL preskočiti .

Ovdje ćemo vidjeti primjer ugniježđenog ako -

Primjer izjave ugniježđenog - ako: Najveći od tri broja

U ovom primjeru ispisat ćemo najveći od tri broja pomoću izraza Nested-If. Brojevi će se dodijeliti u dijelu za izjavu, kao što možete vidjeti u donjem kodu, tj. Broj = 10,15 i 20, a maksimalan broj dohvatit će se pomoću ugniježđenih izjava.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Objašnjenje koda:

  • Redak koda 2: Proglašavanje varijable "a" tipom podataka "BROJ" i inicijalizacija vrijednosti "10".
  • Redak koda 3: Proglašavanje varijable 'b' tipom podataka 'BROJ' i inicijalizacija vrijednošću '15'.
  • Redak koda 4: Proglašavanje varijable 'c' tipom podataka 'BROJ' i inicijalizacija vrijednošću '20'.
  • Redak 6: Ispis izjave "Program je pokrenut" (redak 6).
  • Redak koda 7: Provjera stanja1, je li 'a' veće od 'b' (redak 7).
  • Redak koda 10: Ako je 'a' veće od 'b, tada će uvjet u' ugniježđeno-ako 1 'provjeriti je li' a 'veći od' c '(redak 10).
  • Redak koda 13: Ako je i dalje 'a' veće, ispisat će se poruka 'A je najveće' (redak 11). Inače, ako uvjet2 ne uspije, ispisat će se "C je najveći" (redak 13).
  • Redak koda 18: U slučaju da uvjet1 vrati false, tada će uvjet u 'ugniježđeno-ako 2' provjeriti je li 'b' veći od 'c' (redak 18).
  • Linijska oznaka 21: Ako je 'b' veće od 'c', tada će se ispisati poruka 'B je najveća' (redak 19), inače ako uvjet2 ne uspije, ispisat će se 'C je najveća' (redak 21).
  • Redak koda 24: Ispis izjave "Program je završen" (redak 24).

Izlaz koda:

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

Sažetak

U ovom smo poglavlju naučili različite izjave o donošenju odluka te njihovu sintaksu i primjere. Ispod tablice nalazi se sažetak različitih uvjetnih izjava o kojima smo razgovarali.

TIP

OPIS

UPOTREBA

AKO TADA

Provjerava logičko stanje ako se izvršava TRUE kôd u bloku 'THEN'.

Da biste preskočili, / izvršite određeni kôd na temelju stanja.

AKO-ONDA-OSTALO

Provjerava logički uvjet ako se izvrši TRUE kôd u bloku 'THEN', ako se izvrši lažni kôd u bloku 'ELSE'.

Najprikladnije u stanju "OVO-ILI-ONO".

AKO-ONDA-ELSIF

Provjerava logičke uvjete u slijedu. Izvršit će se prvi blok u nizu koji vraća TRUE uvjet. Ako niti jedan od uvjeta u slijedu nije TRUE, tada se izvršava kôd u bloku 'ELSE'.

Uglavnom se bira između više od dvije mogućnosti.

GNJESTO-AKO

Omogućuje jednu ili više izjava IF-THEN ili IF-THEN-ELSIF unutar druge izjave IF-THEN ili IF-THEN-ELSIF.

Uglavnom se koristi u situaciji ugniježđenog stanja.