Oracle PL/SQL JOS NIIN MUU Lause: ELSIF, NESTED-IF

Mitä päätöksentekolausunnot ovat?

Päätöksentekolausunnot ovat niitä, jotka päättävät virtauksen ohjauksesta SQL ehtoihin perustuvia lausuntoja. Se antaa ohjelmoijalle paremman hallinnan estää tietyn koodin suorittaminen (kaavio 1) tai valita halutun koodin ehdon perusteella (kaavio 2). Alla on kuvallinen esitys "Päätöksentekolausunnosta".

Päätöksentekolausuntokaavio
Päätöksentekolausuntokaavio

Päätöksentekolausuntojen tyypit:

Oracle tarjoaa seuraavan tyyppisiä päätöksentekolausuntoja.

  • JOS SITTEN
  • JOS-NIIN-MUU
  • JOS-SIIN-ELSIF
  • NESTED-IF
  • CASE
  • HAETTU TAPAUS

JOS-SIIN -lausunto

IF-THEN-käskyä käytetään pääasiassa tietyn koodiosan suorittamiseen vain, kun ehto täyttyy.

Tilan pitäisi antaa periksi boolean (Totta/Epätosi). Se on perusehtolauseke, jonka avulla ORACLE voi suorittaa/ohittaa tietyn koodin ennalta määritettyjen ehtojen perusteella.

IF THEN -lauseiden syntaksi:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • Yllä olevassa syntaksissa avainsanaa "JOS" seuraa ehto, jonka arvo on "TRUE"/"FALSE".
  • Ohjaus suorittaa vain jos tilanne palaa .
  • Tilan tapauksessa arvotaan silloin SQL ohittaa , ja se alkaa suorittaa koodia END IF -lohkon vieressä.

Huomautus: Aina kun ehto on 'NULL', SQL käsittelee 'NULL' arvon 'FALSE'.

Esimerkki 1: Tässä esimerkissä aiomme tulostaa viestin, kun numero on suurempi kuin 100. Tätä varten suoritamme seuraavan koodin

Tulostaaksesi viestin, kun numeron arvo on suurempi kuin 100, suoritamme seuraavan koodin.

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

Koodin selitys:

  • Koodirivi 2: Muuttujan 'a' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '10'.
  • Koodirivi 4: Tulostetaan lause "Ohjelma aloitettu".
  • Koodirivi 5: Ehdon tarkistaminen, onko muuttuja a suurempi kuin 100.
  • Koodirivi 6: Jos 'a' on suurempi kuin '100', tulostetaan "a on suurempi kuin 100". Jos "a" on pienempi tai yhtä suuri kuin 100, ehto epäonnistuu, joten yllä oleva tulostuskäsky jätetään huomiotta.
  • Koodirivi 8: Tulostetaan lausunto "Ohjelma suoritettu".

Koodilähtö:

Program started.
Program completed.

Esimerkki 2: Tässä esimerkissä aiomme tulostaa viestin, jos englannin vokaalit (A, E, I, O, U) sisältävät tietyn aakkoston.

Tulostaaksesi viestin, kun annettu merkki on Vokaali, suoritamme seuraavan koodin.

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

Koodin selitys:

  • Koodirivi 2: Ilmoitetaan muuttuja 'a' '1'-koon tietotyypiksi 'CHAR' ja alustetaan arvolla 'u'.
  • Koodirivi 4: Ehdon tarkistaminen, onko luettelossa muuttuja 'a' ('A', 'E', 'I', 'O', 'U').
  • Arvo 'a' on muutettu isoiksi kirjaimille ennen vertailua, jotta vertailu ei tee kirjainkoolla merkitystä.
  • Koodirivi 5: Jos "a" on luettelossa, tulostetaan lause "Hahmo on englanninkielisissä vokaaleissa". Jos ehto epäonnistuu, tämä ohjelma ei anna tulosta, koska IF-THEN-lohkon ulkopuolella emme ole antaneet tulostuskäskyä.

Koodilähtö:

The character is in English Vowels

JOS-NIIN-MUU -lausunto

  • IF-THEN-ELSE-käskyä käytetään pääasiassa valitsemaan kahden vaihtoehdon välillä ehdon perusteella.
  • Alla on IF-THEN-ELSE-käskyn syntaksiesitys.

IF-THEN-ELSE-lauseiden syntaksi:

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;
  • Yllä olevassa syntaksissa avainsanaa "JOS" seuraa ehto, jonka arvo on "TRUE"/"FALSE".
  • Ohjaus suorittaa vain jos tilanne palaa .
  • Tilanteessa arvioidaan sitten SQL suoritetaan .
  • Joka tapauksessa toinen kahdesta toimintolohkosta suoritetaan.

Huomautus: Aina kun ehdon arvo on 'NULL', SQL käsittelee 'NULL' arvona 'FALSE'.

Esimerkki 1: Tässä esimerkissä tulostetaan viesti, onko annettu numero pariton vai parillinen.

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

Koodin selitys:

  • Koodirivi 2: Muuttujan 'a' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '11'.
  • Koodirivi 4: Tulostetaan lause "Ohjelma aloitettu".
  • Koodirivi 5: Tarkistaa ehto, onko muuttujan 'a' moduuli '2':lla 0.
  • Koodirivi 6: Jos '0', niin "a on parillinen luku" tulostetaan.
  • Koodirivi 7: Jos moduuliarvo ei ole '0', ehto palauttaa , joten viesti "a on pariton" tulostetaan.
  • Koodirivi10: Lausunnon "Ohjelma suoritettu" tulostaminen

Koodilähtö:

Program started.
a is odd number
Program completed.

IF-THEN-ELSIF-lausunto

  • IF-THEN-ELSIF-lausetta käytetään pääasiassa silloin, kun yksi vaihtoehto tulee valita joukosta vaihtoehtoja, jolloin jokaisella vaihtoehdolla on omat ehdot täytettävänsä.
  • Ensimmäiset olosuhteet, jotka palaavat suoritetaan, ja loput ehdot ohitetaan.
  • IF-THEN-ELSIF-käsky voi sisältää 'ELSE'-lohkon. Tämä ELSE-lohko suoritetaan, jos mikään ehdoista ei täyty.

Huomautuksia: ELSE-lohko on valinnainen tässä ehdollisessa lauseessa. Jos ELSE-lohkoa ei ole eikä mikään ehdoista täyty, ohjain ohittaa kaikki toimintolohkot ja aloittaa koodin jäljellä olevan osan suorittamisen.

IF-THEN-ELSIF-lauseiden syntaksi:

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;
  • Yllä olevassa syntaksissa ohjaus suorittaa komennon vain jos ehto1 palaa .
  • Jos ehto1 ei täyty, ohjain tarkistaa ehdon 2.
  • Ohjain poistuu IF-lauseesta seuraavissa kahdessa tapauksessa.
    • Kun ohjain löysi tilan, joka palaa . Tässä tapauksessa vastaava action_block suoritetaan ja ohjain poistuu tästä IF-lausekelohkosta ja aloittaa jäljellä olevan koodin suorittamisen.
    • Kun mikään ehdoista ei täyty, ohjain suorittaa ELSE-lohkon, jos se on olemassa, ja poistuu sitten IF-lauseesta.

Huomautus: Aina kun ehdon arvo on 'NULL', SQL käsittelee 'NULL' arvona 'FALSE'.

Esimerkki 1: Ilman ELSE-lohkoa

Tässä esimerkissä tulostetaan arvosana annettujen pisteiden perusteella ilman muuta ehtoa (arvosana >= 70 Arvosana A, arvosana >=40 ja arvosana<70 Arvosana B, arvosana >=35 ja arvosana<40 Arvosana 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;
/

Koodin selitys:

  • Koodirivi 2: Muuttujan mark ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla 55.
  • Koodirivi 4: Tulostetaan lause "Ohjelma aloitettu".
  • Koodirivi 5: Ehdon1 tarkistaminen, onko "merkki" suurempi tai yhtä suuri kuin 70.
  • Koodirivi 7: Koska ehto1 epäonnistui, ehto2 '70>merkki>=40' tarkistetaan.
  • Koodirivi 8: Condition2 palauttaa , joten viesti "Grade B" tulostetaan.
  • Koodirivi12: Tulostetaan lausunto ”Ohjelma valmis”.
  • Tässä tapauksessa ehto3 'merkki < 35' ohitetaan, koska ohjain löysi yhden ehdon, joka palauttaa ennen ehtoa 3.

Koodilähtö:

Program started.
Grade B
Program completed.

Esimerkki 2: ELSE-lohkolla

Tässä esimerkissä tulostetaan arvosana annettujen pisteiden perusteella muulla ehdolla (arvosana >= 70 Arvosana A, arvosana >=40 ja arvosana<70 Arvosana B, arvosana >=35 ja arvosana<40 Arvosana C, muuten "Ei arvosanaa").

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

Koodin selitys:

  • Koodirivi 2: Muuttujan mark ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla 25.
  • Koodirivi 4: Tulostetaan lause "Ohjelma aloitettu".
  • Koodirivi 5: Ehdon 1 tarkistaminen, onko "merkki" suurempi tai yhtä suuri kuin 70.
  • Koodirivi 7: Koska ehto1 epäonnistui, ehto2 '70>merkki>=40' tarkistetaan.
  • Koodirivi 8: Koska ehto2 epäonnistui, ehto3 '40>merkki>=35' tarkistetaan.
  • Koodirivi 11: Koska kaikki ehdot ovat epäonnistuneet, ohjaus tarkistaa nyt ELSE-lohkon olemassaolon ja tulostaa sanoman "Ei arvosanaa" ELSE-lohkosta.
  • Koodirivi14: Tulostetaan lausunto ”Ohjelma valmis”.

Koodilähtö:

Program started.
No Grade 
Program completed.

NESTED-IF-lausunto

  • NESTED-IF-lauseessa ohjelmoijat voivat periaatteessa sijoittaa yhden tai useamman IF-ehdon toisen IF-ehdon sisään. muita kuin normaaleja lausuntoja.
  • Jokaisella "JOS"-ehdolla tulee olla erillinen "END IF" -lause, joka merkitsee kyseisen tietyn soveltamisalan lopun. .
  • IF-lause pitää lähintä END IF -lausetta kyseisen ehdon päätepisteenä.
  • NESTED-IF:n kuvallinen esitys näkyy alla olevassa kaaviossa.

NESTED-IF-lausunto

NESTED-IF-lausunto

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

Syntaksiselitys:

  • Yllä olevassa syntaksissa ulompi IF sisältää vielä yhden IF-lauseen toimintalohkossaan.
  • Ehto1 palauttaa , ohjaus suoritetaan ja tarkistaa kunnon1.
  • Jos ehto2 myös palauttaa , sitten myös teloitetaan.
  • Tilan 2 tapauksessa arvo on silloin SQL ohittaa .

Tässä aiomme nähdä esimerkin Nested Ifistä -

Esimerkki sisäkkäis-If-lauseesta: Suurin kolmesta numerosta

Tässä esimerkissä aiomme tulostaa suurimman kolmesta luvusta käyttämällä Nested-If-lausetta. Numerot annetaan deklarointiosassa, kuten alla olevasta koodista näet, eli Numero= 10,15 ja 20 ja maksimiluku noudetaan käyttämällä sisäkkäisiä if-lauseita.

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

Koodin selitys:

  • Koodirivi 2: Muuttujan 'a' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '10'.
  • Koodirivi 3: Muuttujan 'b' ilmoittaminen NUMBER-tietotyypiksi ja sen alustaminen arvolla '15'.
  • Koodirivi 4: Muuttujan 'c' ilmoittaminen 'NUMBER'-tietotyypiksi ja sen alustaminen arvolla '20'.
  • Koodirivi 6: Tulostetaan lause "Ohjelma aloitettu" (rivi 6).
  • Koodirivi 7: Ehdon1 tarkistaminen, onko "a" suurempi kuin "b" (rivi 7).
  • Koodirivi 10: Jos "a" on suurempi kuin "b", ehto "sisäkkäinen-jos 1" tarkistaa, onko "a" suurempi kuin "c" (rivi 10).
  • Koodirivi 13: Jos edelleen "a" on suurempi, tulostetaan viesti "A on suurin" (rivi 11). Muussa tapauksessa, jos ehto2 epäonnistuu, tulostetaan "C on suurin" (rivi 13).
  • Koodirivi 18: Jos ehto1 palauttaa epätosi, ehto kohdassa "nested-if 2" tarkistaa, onko "b" suurempi kuin "c" (rivi 18).
  • Koodirivi 21: Jos 'b' on suurempi kuin 'c', tulostetaan viesti 'B on suurin' (rivi 19), muuten jos ehto2 epäonnistuu, tulostetaan 'C on suurin' (rivi 21).
  • Koodirivi 24: Tulostetaan lausunto ”Ohjelma suoritettu” (rivi 24).

Koodin ulostulo:

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

Yhteenveto

Tässä luvussa olemme oppineet erilaisia ​​päätöksentekolausekkeita ja niiden syntaksia ja esimerkkejä. Alla olevassa taulukossa on yhteenveto erilaisista ehdollisista lausunnoista, joista olemme keskustelleet.

TYYPPI KUVAUS KÄYTTÖ
JOS SITTEN Tarkistaa loogisen ehdon, suoritetaanko 'THEN'-lohkon TRUE-koodi. Ohita/suorita tietty koodi ehdon perusteella.
JOS-NIIN-MUU Tarkistaa Boolen ehdon, suoritetaanko TOSI-koodi 'THEN'-lohkossa, jos väärä koodi 'ELSE'-lohkossa suoritetaan. Sopivin "TÄMÄ-TAI-TOI" -tilassa.
JOS-SIIN-ELSIF Tarkistaa Boolen ehdon peräkkäisessä järjestyksessä. Jakson ensimmäinen lohko, joka palauttaa TOSI-ehdon, suoritetaan. Jos mikään sekvenssin ehdoista ei ole TOSI, 'ELSE'-lohkossa oleva koodi suoritetaan. Useimmiten valittiin useammasta kuin kahdesta vaihtoehdosta.
NESTED-IF Sallii yhden tai useamman IF-THEN- tai IF-THEN-ELSIF-käskyn toisen IF-THEN- tai IF-THEN-ELSIF-lauseen sisällä. Käytetään pääasiassa sisäkkäisissä olosuhteissa.