Oracle PL/SQL KUI SIIS MUU Avaldus: ELSIF, NESTED-IF

Mis on otsustusavaldused?

Otsustusavaldused on need, kes otsustavad voo kontrolli üle SQL tingimustel põhinevad avaldused. See annab programmeerijale parema kontrolli teatud koodi käivitamise takistamise (skeem 1) või soovitud koodi valimise üle tingimuse alusel (skeem 2). Allpool on "Otsuse tegemise avalduse" pilt.

Otsuste tegemise avalduse diagramm
Otsuste tegemise avalduse diagramm

Otsuste tegemise avalduste tüübid:

Oracle pakub järgmist tüüpi otsustusavaldusi.

  • KUI-siis
  • KUI-SIIS-MUI
  • KUI-SIIS-ELSIF
  • NESTED-IF
  • CASE
  • OTSITUD KOHTU

KUI-SIIS avaldus

IF-THEN-lauset kasutatakse peamiselt teatud koodijao täitmiseks ainult siis, kui tingimus on täidetud.

Tingimus peaks järele andma Boolean (Tõene/vale). See on põhitingimuslause, mis võimaldab ORACLE'il eelmääratletud tingimustel teatud koodijupi käivitada/vahele jätta.

IF THEN lausete süntaks:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • Ülaltoodud süntaksis järgneb märksõnale "IF" tingimus, mille väärtus on "TRUE"/"FALSE".
  • Juhtseade teostab ainult siis, kui seisund taastub .
  • Seisundi korral hindab siis jätab SQL vahele , ja see hakkab täitma ploki „END IF” kõrval olevat koodi.

Märge: Kui tingimus on hinnatud väärtusele 'NULL', käsitleb SQL 'NULL'i kui 'FALSE'.

Näiteks 1: Selles näites prindime sõnumi, kui number on suurem kui 100. Selleks käivitame järgmise koodi

Sõnumi printimiseks, kui numbri väärtus on suurem kui 100, käivitame järgmise koodi.

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

Koodi selgitus:

  • Koodirida 2: muutuja 'a' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '10'.
  • Koodirida 4: Avalduse “Programm käivitatud” trükkimine.
  • Koodirida 5: tingimuse kontrollimine, kas muutuja "a" on suurem kui "100".
  • Koodirida 6: kui "a" on suurem kui "100", prinditakse "a on suurem kui 100". Kui 'a' on väiksem kui 100 või sellega võrdne, siis tingimus nurjub, mistõttu ülaltoodud printimislauset eiratakse.
  • Koodirida 8: Avalduse “Programm lõpetatud” trükkimine.

Koodi väljund:

Program started.
Program completed.

Näide 2: Selles näites trükime sõnumi, kui antud tähestik esineb inglise vokaalides (A, E, I, O, U).

Sõnumi printimiseks, kui antud märk on Vokaal, käivitame järgmise koodi.

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

Koodi selgitus:

  • Koodirida 2: Muutuja 'a' deklareerimine '1' suuruse andmetüübiga 'CHAR' ja selle lähtestamine väärtusega 'u'.
  • Koodirida 4: Tingimuse kontrollimine, kas loendis on muutuja 'a' ('A', 'E', 'I', 'O', 'U').
  • Väärtus „a” on enne võrdlemist teisendatud suurtähtedeks, et võrdlus ei oleks tõstutundlik.
  • Koodirida 5: Kui loendis on 'a', siis trükitakse lause "Tähemärk on inglise häälikutes". Kui tingimus ebaõnnestus, siis see programm ei anna väljundit, kuna väljaspool IF-THEN plokki pole me väljastanud ühtegi printimisavaldust.

Koodi väljund:

The character is in English Vowels

KUI-SIIS-MUI avaldus

  • Lauset IF-THEN-ELSE kasutatakse peamiselt tingimusel põhineva kahe alternatiivi vahel valimiseks.
  • Allpool on lause IF-THEN-ELSE süntaksiesitus.

IF-THEN-ELSE lausete süntaks:

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;
  • Ülaltoodud süntaksis järgneb märksõnale "IF" tingimus, mille väärtus on "TRUE"/"FALSE".
  • Juhtseade teostab ainult siis, kui seisund taastub .
  • Seisundi korral hinnatakse siis käivitub SQL .
  • Igal juhul täidetakse üks kahest toiminguplokist.

Märge: Kui tingimuse väärtus on NULL, käsitleb SQL väärtust NULL väärtusena FALSE.

Näiteks 1: Selles näites prindime sõnumi, kas antud arv on paaritu või paaritu.

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

Koodi selgitus:

  • Koodirida 2: muutuja 'a' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '11'.
  • Koodirida 4: Avalduse “Programm käivitatud” trükkimine.
  • Koodirida 5: kontrollige tingimust, kas muutuja 'a' moodul väärtusega '2' on 0.
  • Koodirida 6: kui '0', siis prinditakse "a on paarisarv".
  • Koodirida 7: kui mooduli väärtus ei ole võrdne '0'ga, tagastatakse tingimus , nii et prinditakse teade "a on paaritu number".
  • Koodirida 10: teate "Programm lõpetatud" printimine

Koodi väljund:

Program started.
a is odd number
Program completed.

IF-THEN-ELSIF avaldus

  • IF-THEN-ELSIF lauset kasutatakse peamiselt siis, kui alternatiivide hulgast tuleks valida üks alternatiiv, kus igal alternatiivil on oma tingimused, mida tuleb täita.
  • Esimesed tingimused, mis tagasi tulevad täidetakse ja ülejäänud tingimused jäetakse vahele.
  • Lause IF-THEN-ELSIF võib sisaldada plokki ELSE. See ELSE plokk käivitatakse, kui ükski tingimus ei ole täidetud.

märkused: ELSE plokk on selles tingimuslauses valikuline. Kui ELSE plokki pole ja ükski tingimus pole täidetud, jätab kontroller kogu toiminguploki vahele ja hakkab täitma ülejäänud koodiosa.

IF-THEN-ELSIF-i lausete süntaks:

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;
  • Ülaltoodud süntaksis käivitab juhtelement käsu ainult siis, kui tingimus1 naaseb .
  • Kui tingimus1 ei ole täidetud, kontrollib kontroller tingimust2.
  • Kontroller väljub IF-avaldusest kahel järgmisel juhul.
    • Kui kontroller leidis mõne tingimuse, mis taastub . Sel juhul käivitatakse vastav action_block ja kontroller väljub sellest IF-lause plokist ning hakkab täitma ülejäänud koodi.
    • Kui ükski tingimus ei ole täidetud, käivitab kontroller ELSE ploki, kui see on olemas, seejärel väljub IF-lausest.

Märge: Kui tingimuse väärtus on NULL, käsitleb SQL väärtust NULL väärtusena FALSE.

Näide 1: Ilma ELSE blokita

Antud näites trükime hinde antud hinnete alusel ilma muu tingimuseta (hinne >= 70 Hinne A, hinne >=40 ja hinne<70 Hinne B, hinne >=35 ja hinne<40 Hinne 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;
/

Koodi selgitus:

  • Koodirida 2: muutuja 'mark' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '55'.
  • Koodirida 4: Avalduse “Programm käivitatud” trükkimine.
  • Koodirida 5: tingimuse1 kontrollimine, kas 'märk' on suurem või võrdne 70-ga.
  • Koodirida 7: kuna tingimus1 nurjus, siis kontrollitakse tingimus2 '70>mark>=40'.
  • Koodirida 8: tingimus2 tagastab , seega prinditakse teade "Haste B".
  • Koodirida12: Avalduse “Programm lõpetatud” trükkimine.
  • Sel juhul jäetakse tingimus3 'mark < 35' vahele, kuna kontroller leidis ühe tingimuse, mis tagastab enne tingimust3.

Koodi väljund:

Program started.
Grade B
Program completed.

Näiteks 2: ELSE plokiga

Antud näites trükime antud hinnete alusel hinde muu tingimusega (märk >= 70 Hinne A, hinne >=40 ja hinne<70 Hinne B, hinne >=35 ja hinne<40 Hinne C, muidu "Hinnet pole").

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

Koodi selgitus:

  • Koodirida 2: muutuja 'mark' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '25'.
  • Koodirida 4: Avalduse “Programm käivitatud” trükkimine.
  • Koodirida 5: kontrollige tingimust 1, kas "märk" on suurem või võrdne 70-ga.
  • Koodirida 7: kuna tingimus1 nurjus, siis kontrollitakse tingimus2 '70>mark>=40'.
  • Koodirida 8: kuna tingimus2 nurjus, siis kontrollitakse tingimus3 '40>mark>=35'.
  • Koodirida 11: kuna kõik tingimused on ebaõnnestunud, kontrollib juht nüüd ELSE ploki olemasolu ja prindib ELSE plokist teate "Hinnet puudub".
  • Koodirida14: Avalduse “Programm lõpetatud” trükkimine.

Koodi väljund:

Program started.
No Grade 
Program completed.

NESTED-IF avaldus

  • NESTED-IF avaldus lubab programmeerijatel põhimõtteliselt paigutada ühe või mitu IF-tingimust teise IF-tingimuse sisse. muud kui tavalised avaldused.
  • Igal tingimusel "IF" peaks olema eraldi lause "END IF", mis tähistab selle konkreetse ulatuse lõppu .
  • IF-lause käsitleb selle konkreetse tingimuse lõpp-punktina lähimat lauset END IF.
  • NESTED-IF-i piltkujutis on näidatud alloleval diagrammil.

NESTED-IF avaldus

NESTED-IF avaldus

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

Süntaksi selgitus:

  • Ülaltoodud süntaksis sisaldab välimine IF oma tegevusplokis veel üht IF-lauset.
  • Tingimus1 tagastab , siis käivitatakse juhtimine ja kontrollib seisukorda1.
  • Kui tingimus2 tagastab ka , siis ka hukatakse.
  • Tingimuse2 korral hindab siis jätab SQL vahele .

Siin näeme näidet Nested Ifist -

Pesastatud-I-lause näide: suurim kolmest arvust

Selles näites trükime Nested-If-lause abil kolmest arvust suurima. Numbrid määratakse deklareerimisosas, nagu näete allolevast koodist, st Number= 10,15 ja 20 ning maksimaalne arv tuuakse pesastatud-if-lausete abil.

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

Koodi selgitus:

  • Koodirida 2: muutuja 'a' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '10'.
  • Koodirida 3: muutuja 'b' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '15'.
  • Koodirida 4: muutuja 'c' deklareerimine andmetüübiks 'NUMBER' ja selle lähtestamine väärtusega '20'.
  • Koodirida 6: Avalduse “Programm käivitatud” trükkimine (rida 6).
  • Koodirida 7: tingimuse1 kontrollimine, kas "a" on suurem kui "b" (rida 7).
  • Koodirida 10: kui 'a' on suurem kui 'b', kontrollib tingimus 'pesastatud-kui 1', kas 'a' on suurem kui 'c' (rida 10).
  • Koodirida 13: kui ikka "a" on suurem, prinditakse teade "A on suurim" (rida 11). Vastasel juhul, kui tingimus2 ebaõnnestub, prinditakse "C on suurim" (rida 13).
  • Koodirida 18: juhul, kui tingimus1 tagastab vale, kontrollib tingimus 'pesastatud-if 2's, kas 'b' on suurem kui 'c' (rida 18).
  • Koodirida 21: kui 'b' on suurem kui 'c' , prinditakse teade 'B on suurim' (rida 19), muidu kui tingimus 2 ebaõnnestub, prinditakse 'C on suurim' (rida 21).
  • Koodirida 24: Avalduse “Programm lõpetatud” trükkimine (rida 24).

Koodi väljund:

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

kokkuvõte

Selles peatükis oleme õppinud erinevaid otsustuslauseid ning nende süntaksit ja näiteid. Allolevas tabelis on kokkuvõte erinevatest tingimuslikest väidetest, mida oleme arutanud.

TÜÜP KIRJELDUS KASUTAMINE
KUI-siis Kontrollib Boole'i ​​tingimust, kui 'THEN' plokis käivitatakse kood TRUE. Konkreetse koodi vahelejätmiseks/käivitamiseks tingimuse põhjal.
KUI-SIIS-MUI Kontrollib Boole'i ​​tingimust, kas käivitatakse kood TRUE plokis 'THEN', kui käivitatakse vale kood plokis ELSE. Kõige sobivam tingimusel „SEE-VÕI-SEE”.
KUI-SIIS-ELSIF Kontrollib Boole'i ​​tingimust järjestikuses järjekorras. Jada esimene plokk, mis tagastab tingimuse TRUE, käivitatakse. Kui ükski jada tingimustest ei ole TRUE, siis käivitatakse kood plokis ELSE. Kasutatakse enam kui kahe alternatiivi valimiseks enamasti.
NESTED-IF Lubab ühe või mitu lauset IF-THEN või IF-THEN-ELSIF mõne muu IF-THEN või IF-THEN-ELSIF lause sees. Kasutatakse peamiselt pesatingimustes.