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

Code Selgitus:

  • Code rida 2: Muutuja 'a' deklareerimine andmetรผรผbina 'NUMBER' ja selle initsialiseerimine vรครคrtusega '10'.
  • Code rida 4: Lause โ€žProgramm kรคivitatudโ€ printimine.
  • Code rida 5: Kontrollitakse tingimust, kas muutuja 'a' on suurem kui '100'.
  • Code rida 6: Kui 'a' on suurem kui '100', siis trรผkitakse tekst โ€ža on suurem kui 100โ€. Kui 'a' on vรคiksem vรตi vรตrdne 100-ga, siis tingimus ebaรตnnestub, seega รผlaltoodud trรผkilauset ignoreeritakse.
  • Code rida 8: Trรผkitakse teade โ€žProgramm on lรตpetatudโ€.

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

Code Selgitus:

  • Code rida 2: Muutuja 'a' deklareerimine '1' suuruse andmetรผรผbiga 'CHAR' ja selle lรคhtestamine vรครคrtusega 'u'.
  • Code rida 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.
  • Code rida 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.

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

Code Selgitus:

  • Code rida 2: Muutuja 'a' deklareerimine andmetรผรผbina 'NUMBER' ja selle initsialiseerimine vรครคrtusega '11'.
  • Code rida 4: Lause โ€žProgramm kรคivitatudโ€ printimine.
  • Code rida 5: Kontrollitakse tingimust, kas muutuja 'a' moodul '2' jรคrgi on 0.
  • Code rida 6: Kui '0', siis trรผkitakse "a on paarisarv".
  • Code rida 7: Kui mooduli vรครคrtus ei ole vรตrdne '0'-ga, siis tingimus tagastab vรครคrtuse , seega trรผkitakse teade โ€ža on paaritu arvโ€.
  • Code rida10: Lause โ€žProgramm on lรตpetatudโ€ printimine

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

Code Selgitus:

  • Code rida 2: Muutuja 'mark' deklareerimine andmetรผรผbiks 'NUMBER' ja selle initsialiseerimine vรครคrtusega '55'.
  • Code rida 4: Lause โ€žProgramm kรคivitatudโ€ printimine.
  • Code rida 5: Tingimus 1 kontrollimine, kas 'mark' on suurem vรตi vรตrdne 70-ga.
  • Code rida 7: Kuna tingimus 1 nurjus, siis kontrollitakse tingimust 2 '70>mark>=40โ€ฒ.
  • Code rida 8: Tingimus2 tagastab , seega trรผkitakse teade โ€žHinne Bโ€.
  • Code rida 12: Lause โ€žProgramm lรตpetatudโ€ printimine.
  • Sel juhul jรคetakse tingimus3 'mark < 35' vahele, kuna kontroller leidis รผhe tingimuse, mis tagastab enne tingimust3.

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

Code Selgitus:

  • Code rida 2: Muutuja 'mark' deklareerimine andmetรผรผbiks 'NUMBER' ja selle initsialiseerimine vรครคrtusega '25'.
  • Code rida 4: Lause โ€žProgramm kรคivitatudโ€ printimine.
  • Code rida 5: Tingimus 1 kontrollimine, kas 'mark' on suurem vรตi vรตrdne 70-ga.
  • Code rida 7: Kuna tingimus 1 nurjus, siis kontrollitakse tingimust 2 '70>mark>=40โ€ฒ.
  • Code rida 8: Kuna tingimus 2 nurjus, siis kontrollitakse tingimust 3 '40>mark>=35โ€ฒ.
  • Code rida 11: Kuna kรตik tingimused on ebaรตnnestunud, kontrollib juhtseade nรผรผd ELSE ploki olemasolu ja prindib ELSE plokist teate โ€žHinne puudubโ€.
  • Code rida 14: Lause โ€žProgramm lรตpetatudโ€ printimine.

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

Code Selgitus:

  • Code rida 2: Muutuja 'a' deklareerimine andmetรผรผbina 'NUMBER' ja selle initsialiseerimine vรครคrtusega '10'.
  • Code rida 3: Muutuja 'b' deklareerimine andmetรผรผbina 'NUMBER' ja selle initsialiseerimine vรครคrtusega '15'.
  • Code rida 4: Muutuja 'c' deklareerimine andmetรผรผbina 'NUMBER' ja selle initsialiseerimine vรครคrtusega '20'.
  • Code rida 6: Lause โ€žProgramm kรคivitatudโ€ printimine (rida 6).
  • Code rida 7: Tingimus 1 kontrollimine, kas 'a' on suurem kui 'b' (rida 7).
  • Code rida 10: Kui 'a' on suurem kui 'b', siis tingimus 'nested-if 1' kontrollib, kas 'a' on suurem kui 'c' (rida 10).
  • Code rida 13: Kui 'a' on ikka suurem, siis trรผkitakse teade 'A on suurim' (rida 11). Vastasel juhul, kui tingimus 2 ebaรตnnestub, siis trรผkitakse teade 'C on suurim' (rida 13).
  • Code rida 18: Kui tingimus 1 tagastab vรครคrtuse โ€žvรครคrโ€, siis kontrollib tingimus โ€žnested-if 2โ€-s, kas โ€žbโ€ on suurem kui โ€žcโ€ (rida 18).
  • Code rida 21: Kui 'b' on suurem kui 'c', siis trรผkitakse teade 'B on suurim' (rida 19), vastasel juhul, kui tingimus 2 ebaรตnnestub, siis trรผkitakse teade 'C on suurim' (rida 21).
  • Code rida 24: Trรผkitakse avaldus โ€žProgramm on lรตpetatudโ€ (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.

Vรตta see postitus kokku jรคrgmiselt: