Oracle PL/SQL IF THEN ELSE utasítás: ELSIF, NESTED-IF
⚡ Okos összefoglaló
A PL/SQL döntéshozatali utasítások szabályozzák, hogy melyik kód fut egy logikai feltétel alapján. Oracle Az IF-THEN, IF-THEN-ELSE, IF-THEN-ELSHA és NESTED-IF függvényeket biztosítja, így egy program kihagyhat egy blokkot, választhat két útvonal közül, vagy választhat egyet a sok alternatíva közül.

Mik azok a döntéshozatali nyilatkozatok?
A döntéshozatali utasítások határozzák meg az áramlásvezérlést SQL feltételeken alapuló utasítások. Ezek jobb kontrollt biztosítanak a programozónak egy adott blokk végrehajtásának megakadályozása, vagy egy kívánt blokk feltételen alapuló kiválasztása felett. Az alábbiakban a döntéshozatali utasítás képi ábrázolása látható.

Döntéshozatali nyilatkozatok típusai: Oracle a következő típusokat kínálja.
- HA AKKOR
- HA-AKKOR-MÁS
- HA-AKKOR-ELSIF
- FÉSZESÍTETT-HA
- Esetek
- KERESÉS ESET
Ez az oktatóanyag az IF variánsokat tárgyalja. A CASE és a keresett CASE űrlapokat a következő részben tárgyaljuk. PL/SQL CASE utasítás útmutató.
HA-THEN nyilatkozat
Az IF-THEN utasítást arra használjuk, hogy egy adott kódrészletet csak akkor hajtsunk végre, ha egy feltétel teljesül. A feltételnek egy eredményt kell eredményeznie. logikai (Igaz/Hamis) érték. Ez egy alapvető feltételes utasítás, amely lehetővé teszi Oracle egy kódrészletet végrehajtani vagy kihagyni az előre meghatározott feltétel alapján.
HA-AKKOR utasítások szintaxisa:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END IF;
- A fenti szintaxisban az „HA” kulcsszót egy feltétel követi, amely „IGAZ” vagy „HAMIS” értéket ad ki.
- A vezérlés végrehajtja a csak akkor, ha az állapot visszatér .
- Ha a feltétel kiértékelése a következőre történik: , az SQL kihagyja a és az 'END IF' blokk után elkezdi végrehajtani a kódot.
Jegyzet: Amikor egy feltétel értéke 'NULL', az SQL a 'NULL' értéket 'FALSE'-ként kezeli.
Példa 1: Ebben a példában egy üzenetet nyomtatunk ki, ha a szám nagyobb, mint 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 Magyarázat:
- Code 2. sor: Az 'a' változó deklarálása 'NUMBER' adattípusként és inicializálása '10' értékkel.
- Code 4. sor: A „Program elindult” utasítás kinyomtatása.
- Code 5. sor: Annak a feltételnek az ellenőrzése, hogy az 'a' változó nagyobb-e, mint '100'.
- Code 6. sor: Ha az 'a' nagyobb, mint '100', akkor az „a nagyobb, mint 100” szöveg jelenik meg. Ha az 'a' kisebb vagy egyenlő, mint 100, a feltétel sikertelen, és a nyomtatási utasítás figyelmen kívül marad.
- Code 8. sor: A „Program befejeződött” utasítás kinyomtatása.
Code output:
Program started. Program completed.
Példa 2: Ebben a példában egy üzenetet nyomtatunk ki, ha egy adott betű angol magánhangzó (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 Magyarázat:
- Code 2. sor: Az 'a' változó deklarálása '1' méretű 'CHAR' változóként, és inicializálása 'u' értékkel.
- Code 4. sor: Annak ellenőrzése, hogy az 'a' változó szerepel-e a listában ('A', 'E', 'I', 'O', 'U'). Az 'a' értékét nagybetűsre konvertálja az összehasonlítás előtt, hogy az összehasonlítás során ne legyen megkülönböztethető a kis- és nagybetűk.
- Code 5. sor: Ha az 'a' karakter szerepel a listában, akkor a „A karakter angol magánhangzókban van” szöveg kerül kiírásra. Ha a feltétel nem teljesül, a program nem ad kimenetet, mivel az IF-THEN blokkon kívül nincs kiíró utasítás.
Code output:
The character is in English Vowels
HA-AKKOR-MÁS nyilatkozat
Az IF-THEN-ELSE utasítás két alternatíva közötti választásra szolgál egy feltétel alapján. Az alábbiakban a szintaxist láthatjuk.
Az IF-THEN-ELSE utasítások szintaxisa:
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;
- Az „HA” kulcsszót egy feltétel követi, amely „IGAZ” vagy „HAMIS” értéket ad ki.
- A vezérlés végrehajtódik csak akkor, ha az állapot visszatér .
- Ha a feltétel kiértékelése a következőre történik: , az SQL végrehajtja .
- Mindenesetre a két műveleti blokk egyike végrehajtódik.
Jegyzet: Amikor egy feltétel értéke 'NULL', az SQL a 'NULL' értéket 'FALSE'-ként kezeli.
Példa 1: Ebben a példában kiírjuk, hogy a megadott szám páros vagy páratlan.
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 Magyarázat:
- Code 2. sor: Az 'a' változó deklarálása 'NUMBER' adattípusként és inicializálása '11' értékkel.
- Code 4. sor: A „Program elindult” utasítás kinyomtatása.
- Code 5. sor: Annak ellenőrzése, hogy az 'a' változó '2'-vel vett modulusa 0-e.
- Code 6. sor: Ha '0', akkor az „a páros szám” szöveg jelenik meg.
- Code 7. sor: Ha a modulus értéke nem egyenlő '0'-val, a feltétel visszaadja a , tehát az „a páratlan szám” szöveg jelenik meg.
- Code 10. sor: A „Program befejeződött” utasítás kinyomtatása.
Code output:
Program started. a is odd number Program completed.
IF-THEN-ELSIF nyilatkozat
- Az IF-THEN-ELSIF utasítást akkor használjuk, ha egy alternatívát kell választani egy alternatívák halmazából, ahol minden alternatívának megvan a saját feltétele.
- Az első visszatérő feltétel végrehajtásra kerül, a fennmaradó feltételeket pedig kihagyja.
- Az IF-THEN-ELSIF utasítás tartalmazhat egy 'ELSE' blokkot, amely akkor hajtódik végre, ha egyik feltétel sem teljesül.
Jegyzet: Az ELSE blokk opcionális. Ha nincs ELSE blokk, és egyik feltétel sem teljesül, a vezérlő kihagyja az összes műveleti blokkot, és a fennmaradó kódot hajtja végre.
Az IF-THEN-ELSIF utasítások szintaxisa:
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;
- A vezérlés végrehajtódik csak akkor, ha az 1. feltétel visszaadja .
- Ha az első feltétel nem teljesül, a vezérlő ellenőrzi a második feltételt, és így tovább.
- A vezérlő kilép az IF utasításból, amikor olyan feltételt talál, amely visszaadja a és lefuttatja a megfelelő műveleti blokkot, vagy ha egyik sem teljesül, és lefuttatja az ELSE blokkot (ha van ilyen).
Jegyzet: Amikor egy feltétel értéke 'NULL', az SQL a 'NULL' értéket 'FALSE'-ként kezeli.
1. példa: ELSE blokk nélkül. Ebben a példában a megadott jegyek alapján nyomtatjuk ki az érdemjegyet, else feltétel nélkül (jegy >= 70 A jegy, jegy >= 40 és jegy < 70 B jegy, jegy >= 35 és jegy < 40 C jegy).
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 Magyarázat:
- Code 2. sor: A 'mark' változó deklarálása 'NUMBER' adattípusként és inicializálása '55' értékkel.
- Code 4. sor: A „Program elindult” utasítás kinyomtatása.
- Code 5. sor: Az 1. feltétel ellenőrzése, hogy a 'jel' értéke nagyobb vagy egyenlő-e 70-nel.
- Code 7. sor: Mivel az 1. feltétel nem teljesült, a 2. feltételt a '70 > mark >= 40′ jelöli a rendszer.
- Code 8. sor: A Condition2 értéket adja vissza , így a „B osztály” üzenet kerül kinyomtatásra.
- Code 12. sor: A „Program befejeződött” utasítás kinyomtatása. A 3. feltételt, a „jegy < 35”-öt kihagyjuk, mivel már található egy IGAZ feltétel.
Code output:
Program started. Grade B Program completed.
2. példa: ELSE blokkal. Ebben a példában a megadott jegyek alapján nyomtatjuk ki az érdemjegyet egy else feltétellel (érdemjegy >= 70 A érdemjegy, érdemjegy >= 40 és érdemjegy < 70 B érdemjegy, érdemjegy >= 35 és érdemjegy < 40 C érdemjegy, egyébként 'Nincs érdemjegy').
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 Magyarázat:
- Code 2. sor: A 'mark' változó deklarálása 'NUMBER' adattípusként és inicializálása '25' értékkel.
- Code 4. sor: A „Program elindult” utasítás kinyomtatása.
- Code 5. sor: Az 1. feltétel ellenőrzése, hogy a 'jel' értéke nagyobb vagy egyenlő-e 70-nel.
- Code 7. sor: Mivel az 1. feltétel nem teljesült, a 2. feltételt a '70 > mark >= 40′ jelöli a rendszer.
- Code 9. sor: Mivel az 2. feltétel nem teljesült, a 3. feltételt a '40 > mark >= 35′ jelöli a rendszer.
- Code 11. sor: Mivel minden feltétel sikertelen volt, a vezérlő ellenőrzi az ELSE blokkot, és „Nincs osztályzat” eredményt nyomtat.
- Code 14. sor: A „Program befejeződött” utasítás kinyomtatása.
Code output:
Program started. No Grade Program completed.
NESTED-IF nyilatkozat
- A NESTED-IF utasítás lehetővé teszi a programozók számára, hogy egy vagy több 'HA' feltételt egy másik 'HA' feltételen belül helyezzenek el. .
- Minden „HA” feltételhez külön „END HA” utasításnak kell tartoznia, amely az adott feltétel hatókörének végét jelzi. .
- Az „IF” utasítás a legközelebbi „END IF”-et tekinti az adott feltétel végpontjának.
- A NESTED-IF képi ábrázolása alább látható.
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
Szintaxis magyarázata:
- A külső IF műveleti blokkja még egy IF utasítást tartalmaz.
- Ha az 1. feltétel visszatér , a vezérlés végrehajtódik és ellenőrzi a feltételt2.
- Ha a 2. feltétel is visszatér , akkor kivégzik is.
- Ha a 2. feltétel kiértékelése a következőt jelenti: , SQL kihagyja .
Példa a beágyazott HA utasításra: Három szám közül a legnagyobb. Ebben a példában három szám közül a legnagyobbat nyomtatjuk ki egy beágyazott ha utasítással. A számokat a deklarációs részben adjuk meg (Number = 10, 15 és 20), a maximumot pedig beágyazott ha utasításokkal olvassuk be.
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 Magyarázat:
- Code 2-4. sor: Az 'a', 'b' és 'c' változók 'NUMBER'-ként való deklarálása és 10, 15 és 20 értékekkel való inicializálása.
- Code 6. sor: A „Program elindult” utasítás kinyomtatása.
- Code 7. sor: Az 1. feltétel ellenőrzése, hogy 'a' nagyobb-e, mint 'b'.
- Code 10. sor: Ha az 'a' nagyobb, mint 'b', akkor a nested-if 1 ellenőrzi, hogy 'a' nagyobb-e, mint 'c'.
- Code 11-13. sor: Ha az „a” továbbra is nagyobb, akkor az „A a legnagyobb” jelenik meg; egyébként a „C a legnagyobb” jelenik meg.
- Code 18. sor: Ha a feltétel1 hamis értéket ad vissza, a nested-if 2 ellenőrzi, hogy a 'b' nagyobb-e, mint a 'c'.
- Code 19-21. sor: Ha a 'b' nagyobb, mint a 'c', akkor a 'B a legnagyobb' felirat jelenik meg; egyébként a 'C a legnagyobb' felirat.
- Code 24. sor: A „Program befejeződött” utasítás kinyomtatása.
Kód kimenete:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Döntéshozatali nyilatkozatok összehasonlítása
Az alábbi táblázat összefoglalja a tárgyalt különféle feltételes utasításokat, így egy adott helyzethez kiválasztható a megfelelő.
| típus | Leírás | Használat |
|---|---|---|
| HA AKKOR | Logikai feltételt ellenőriz; ha IGAZ, akkor a 'THEN' blokkban lévő kód végrehajtódik. | Egy adott blokk kihagyása vagy végrehajtása a feltétel alapján. |
| HA-AKKOR-MÁS | Logikai feltételt ellenőriz; ha IGAZ, akkor a 'THEN' blokk, ha HAMIS, akkor az 'ELSE' blokk fut le. | Legmegfelelőbb „ez-vagy-az” helyzetben. |
| HA-AKKOR-ELSIF | A feltételeket sorban ellenőrzi. Az első, IGAZ értéket visszaadó blokk végrehajtásra kerül. Ha egyik sem IGAZ, akkor az 'ELSE' blokk fut le. | Több mint két alternatíva közüli választásra használták. |
| FÉSZESÍTETT-HA | Lehetővé teszi egy vagy több IF-THEN vagy IF-THEN-ELSIF utasítás használatát egy másikban. | Főként beágyazott állapotban használják. |


