Oracle PL/SQL JOS NIIN MUU Lause: ELSIF, NESTED-IF
⚡ Älykäs yhteenveto
PL/SQL-päätöksentekolausekkeet ohjaavat totuusarvon ehdon perusteella sitä, mikä koodi suoritetaan. Oracle tarjoaa JOS-NIIN, JOS-NIIN-MUUTAIN, JOS-NIIN-ELSE ja NESTED-IF, joten ohjelma voi ohittaa lohkon, valita kahden polun välillä tai valita yhden vaihtoehdon monista.

Mitä päätöksentekolausunnot ovat?
Päätöksentekolausunnot päättävät tiedonkulun ohjauksesta SQL ehtoihin perustuvat lauseet. Ne antavat ohjelmoijalle paremman hallinnan tietyn lohkon suorittamisen estämisessä tai halutun lohkon valitsemisessa ehdon perusteella. Alla on kuvallinen esitys päätöksentekolauseesta.

Päätöksentekolausuntojen tyypit: Oracle tarjoaa seuraavat tyypit.
- JOS SITTEN
- JOS-NIIN-MUU
- JOS-SIIN-ELSIF
- NESTED-IF
- CASE
- HAETTU TAPAUS
Tämä opetusohjelma käsittelee IF-variantteja. CASE- ja haetut CASE-lomakkeet käsitellään tässä. PL/SQL CASE -lauseke opas.
JOS-SIIN -lausunto
IF-THEN-lauseketta käytetään tietyn koodin osan suorittamiseen vain, kun ehto täyttyy. Ehdon tulisi tuottaa boolean (Tosi/Epätosi) -arvo. Se on yksinkertainen ehtolause, jonka avulla Oracle suorittaa tai ohittaa koodipätkän ennalta määritellyn ehdon perusteella.
IF-THEN-lausekkeiden syntaksi:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END IF;
- Yllä olevassa syntaksissa avainsanaa 'JOS' seuraa ehto, joka antaa tulokseksi 'TOSI' tai 'EPÄTOSI'.
- Ohjaus suorittaa vain jos tila palaa .
- Jos ehto arvioidaan arvoksi , SQL ohittaa ja alkaa suorittaa koodia 'END IF' -lohkon jälkeen.
Huomautus: Aina kun ehto antaa tulokseksi 'NULL', SQL käsittelee 'NULL'-arvoa 'FALSE'-arvona.
Esimerkki 1: Tässä esimerkissä tulostamme viestin, kun luku on suurempi kuin 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 Selitys:
- Code rivi 2: Muuttujan 'a' määrittäminen tietotyypiksi 'NUMBER' ja sen alustaminen arvolla '10'.
- Code rivi 4: Tulostaa lauseen ”Ohjelma käynnistynyt”.
- Code rivi 5: Tarkistetaan ehtoa, onko muuttuja 'a' suurempi kuin '100'.
- Code rivi 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 ja tulostuslauseke ohitetaan.
- Code rivi 8: Tulostaa lauseen ”Ohjelma valmis”.
Code lähtö:
Program started. Program completed.
Esimerkki 2: Tässä esimerkissä tulostetaan viesti, jos annettu kirjain on englannin vokaali (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 Selitys:
- Code rivi 2: Muuttujan 'a' määrittäminen muodossa 'CHAR', jonka koko on '1', ja sen alustaminen arvolla 'u'.
- Code rivi 4: Tarkistetaan, onko muuttuja 'a' läsnä listassa ('A','E','I','O','U'). Muuttujan 'a' arvo muunnetaan isoiksi kirjaimiksi ennen vertailua, jotta vertailussa ei ole kirjainkokoeroa.
- Code rivi 5: Jos listassa on 'a', tulostetaan teksti ”Merkki on englanninkielisissä vokaaleissa”. Jos ehto epäonnistuu, ohjelma ei anna tulosta, koska JOS-NIIN-lohkon ulkopuolella ei ole tulostuslauseketta.
Code lähtö:
The character is in English Vowels
JOS-NIIN-MUU -lausunto
IF-THEN-ELSE-lauseketta käytetään valitsemaan kahden vaihtoehdon välillä ehdon perusteella. Alla on syntaksi.
IF-THEN-ELSE-lauseiden syntaksi:
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;
- Avainsanaa 'JOS' seuraa ehto, joka antaa tulokseksi 'TOSI' tai 'EPÄTOSI'.
- Ohjaus suorittaa vain jos tila palaa .
- Jos ehto arvioidaan arvoksi , SQL suorittaa .
- Joka tapauksessa toinen kahdesta toimintolohkosta suoritetaan.
Huomautus: Aina kun ehto antaa tulokseksi 'NULL', SQL käsittelee 'NULL'-arvoa 'FALSE'-arvona.
Esimerkki 1: Tässä esimerkissä tulostamme, onko annettu luku 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 number'); END IF; dbms_output.put_line ('Program completed.'); END; /
Code Selitys:
- Code rivi 2: Muuttujan 'a' määrittäminen tietotyypiksi 'NUMBER' ja sen alustaminen arvolla '11'.
- Code rivi 4: Tulostaa lauseen ”Ohjelma käynnistynyt”.
- Code rivi 5: Tarkistetaan, onko muuttujan 'a' moduuli '2':lla 0.
- Code rivi 6: Jos arvo on '0', tulostuu teksti ”a on parillinen luku”.
- Code rivi 7: Jos moduluksen arvo ei ole yhtä suuri kuin '0', ehto palauttaa , joten tulostuu ”a on pariton luku”.
- Code rivi 10: Tulostaa lauseen ”Ohjelma valmis”.
Code lähtö:
Program started. a is odd number Program completed.
IF-THEN-ELSIF-lausunto
- IF-THEN-ELSIF-lauseketta käytetään, kun yksi vaihtoehto tulisi valita joukosta vaihtoehtoja, joissa jokaisella vaihtoehdolla on oma ehtonsa.
- Ensimmäinen ehto, joka palaa suoritetaan ja loput ehdot ohitetaan.
- IF-THEN-ELSIF-lauseke voi sisältää 'ELSE'-lohkon, joka suoritetaan, jos mikään ehdoista ei täyty.
Huomautus: ELSE-lohko on valinnainen. Jos ELSE-lohkoa ei ole eikä mikään ehdoista täyty, ohjain ohittaa kaikki toimintolohkot ja suorittaa jäljellä olevan koodin.
IF-THEN-ELSIF-lauseiden syntaksi:
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;
- Ohjaus suorittaa vain jos ehto 1 palauttaa .
- Jos ehto 1 ei täyty, ohjain tarkistaa ehdon 2 ja niin edelleen.
- Ohjain poistuu IF-lauseesta, kun se löytää ehdon, joka palauttaa ja suorittaa vastaavan toimintolohkon, tai kun mikään ehto ei täyty ja MUUTEN-lohko (jos sellainen on) suoritetaan.
Huomautus: Aina kun ehto antaa tulokseksi 'NULL', SQL käsittelee 'NULL'-arvoa 'FALSE'-arvona.
Esimerkki 1: Ilman ELSE-lohkoa. Tässä esimerkissä tulostetaan arvosana annettujen arvosanojen 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; /
Code Selitys:
- Code rivi 2: Muuttujan 'mark' määrittäminen tietotyypiksi 'NUMBER' ja sen alustaminen arvolla '55'.
- Code rivi 4: Tulostaa lauseen ”Ohjelma käynnistynyt”.
- Code rivi 5: Tarkistetaan ehto 1, onko 'merkki' suurempi tai yhtä suuri kuin 70.
- Code rivi 7: Koska ehto 1 epäonnistui, tarkistetaan ehto 2 '70 > merkki >= 40′.
- Code rivi 8: Ehto2 palauttaa , joten tulostuu viesti 'Arvosana B'.
- Code rivi 12: Tulostaa lauseen ”Ohjelma valmis”. Ehto 3 'arvosana < 35' ohitetaan, koska TOSI-ehto on jo löytynyt.
Code lähtö:
Program started. Grade B Program completed.
Esimerkki 2: ELSE-lohkolla. Tässä esimerkissä tulostetaan arvosana annettujen arvosanojen perusteella käyttäen muuta ehtoa (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; /
Code Selitys:
- Code rivi 2: Muuttujan 'mark' määrittäminen tietotyypiksi 'NUMBER' ja sen alustaminen arvolla '25'.
- Code rivi 4: Tulostaa lauseen ”Ohjelma käynnistynyt”.
- Code rivi 5: Tarkistetaan ehto 1, onko 'merkki' suurempi tai yhtä suuri kuin 70.
- Code rivi 7: Koska ehto 1 epäonnistui, tarkistetaan ehto 2 '70 > merkki >= 40′.
- Code rivi 9: Koska ehto 2 epäonnistui, tarkistetaan ehto 3 '40 > merkki >= 35′.
- Code rivi 11: Koska kaikki ehdot epäonnistuivat, ohjaus tarkistaa ELSE-lohkon ja tulostaa 'Ei arvosanaa'.
- Code rivi 14: Tulostaa lauseen ”Ohjelma valmis”.
Code lähtö:
Program started. No Grade Program completed.
NESTED-IF-lausunto
- NESTED-IF-lauseke antaa ohjelmoijille mahdollisuuden sijoittaa yhden tai useamman 'IF'-ehdon toisen 'IF'-ehdon sisään. .
- Jokaisella 'JOS'-ehdolla tulisi olla erillinen 'END IF' -lauseke, joka merkitsee kyseisen ehdon soveltamisalan loppua. .
- 'IF'-lauseke pitää lähimpänä olevaa 'END IF' -lauseketta kyseisen ehdon päätepisteenä.
- NESTED-IF-funktion kuvallinen esitys on esitetty alla.
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
Syntaksiselitys:
- Ulompi IF sisältää yhden IF-lausekkeen lisää toimintolohkossaan.
- Jos ehto 1 palauttaa , ohjaus suorittaa ja tarkistaa kunnon 2.
- Jos myös ehto2 palauttaa , sitten teloitetaan myös.
- Jos ehto2 evaluoituu arvoon , SQL ohittaa .
Esimerkki sisäkkäisestä JOS-lauseesta: Suurin kolmesta luvusta. Tässä esimerkissä tulostetaan kolmesta luvusta suurin käyttämällä sisäkkäistä jos-lauseketta. Luvut annetaan määrittelyosassa (Number = 10, 15 ja 20), ja suurin noudetaan sisäkkäisillä jos-lausekkeilla.
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 Selitys:
- Code rivi 2-4: Muuttujien 'a', 'b' ja 'c' määrittäminen muodossa 'NUMBER' ja niiden alustaminen lukuilla 10, 15 ja 20.
- Code rivi 6: Tulostaa lauseen ”Ohjelma käynnistynyt”.
- Code rivi 7: Tarkistetaan ehto 1, onko 'a' suurempi kuin 'b'.
- Code rivi 10: Jos 'a' on suurempi kuin 'b', nested-if 1 tarkistaa, onko 'a' suurempi kuin 'c'.
- Code rivi 11–13: Jos 'a' on edelleen suurempi, tulostetaan 'A on suurin'; muuten tulostetaan 'C on suurin'.
- Code rivi 18: Jos ehto 1 palauttaa arvon epätosi, nested-if 2 tarkistaa, onko 'b' suurempi kuin 'c'.
- Code rivi 19–21: Jos 'b' on suurempi kuin 'c', tulostetaan 'B on suurin'; muuten tulostetaan 'C on suurin'.
- Code rivi 24: Tulostaa lauseen ”Ohjelma valmis”.
Koodin ulostulo:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Päätöksentekolausuntojen vertailu
Alla oleva taulukko kokoaa yhteen käsitellyt erilaiset ehtolauseet, jotta oikea voidaan valita tietyssä tilanteessa.
| Tyyppi | Tuotetiedot | Käyttö |
|---|---|---|
| JOS SITTEN | Tarkistaa loogisen ehdon; jos se on TOSI, 'NIIN'-lohkon koodi suoritetaan. | Ohita tai suorita tietty lohko ehdon perusteella. |
| JOS-NIIN-MUU | Tarkistaa loogisen ehdon; jos arvo on TOSI, 'NIIN'-lohko suoritetaan, ja jos arvo on EPÄTOSI, 'MUUTEN'-lohko suoritetaan. | Sopivin 'tämä tai tuo' -tilanteessa. |
| JOS-SIIN-ELSIF | Tarkistaa ehdot järjestyksessä. Ensimmäinen lohko, joka palauttaa arvon TRUE, suoritetaan. Jos mikään niistä ei ole TOSI, suoritetaan 'ELSE'-lohko. | Käytetään valittaessa useammasta kuin kahdesta vaihtoehdosta. |
| NESTED-IF | Sallii yhden tai useamman IF-THEN- tai IF-THEN-ELSIF-lausekkeen toisen sisällä. | Käytetään pääasiassa sisäkkäisissä olosuhteissa. |


