Oracle PL/SQL IF THEN ELSE utasítás: ELSIF, NESTED-IF
Mik azok a döntéshozatali nyilatkozatok?
A döntéshozó nyilatkozatok azok, akik döntenek az áramlás szabályozásáról SQL feltételek alapján kijelentéseket. Ez lehetővé teszi a programozó számára, hogy megakadályozza egy adott kód végrehajtását (1. diagram) vagy a kívánt kód kiválasztását a feltétel alapján (2. diagram). Az alábbiakban a „Döntéshozatali nyilatkozat” képi ábrázolása látható.

A döntéshozatali nyilatkozatok típusai:
Oracle a következő típusú döntéshozatali nyilatkozatokat tartalmazza.
- HA AKKOR
- HA-AKKOR-MÁS
- HA-AKKOR-ELSIF
- FÉSZESÍTETT-HA
- CASE
- KERESÉS ESET
HA-THEN nyilatkozat
Az IF-THEN utasítást főként egy adott kódszakasz végrehajtására használják, ha a feltétel teljesül.
A feltételnek engednie kell logikai (Igaz/Hamis). Ez egy alapvető feltételes utasítás, amely lehetővé teszi az ORACLE számára egy adott kódrészlet végrehajtását/kihagyását az előre meghatározott feltételek alapján.
Az IF THEN utasítások szintaxisa:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END if;
- A fenti szintaxisban az 'IF' kulcsszót egy feltétel követi, amelynek kiértékelése 'TRUE'/'FALSE'.
- A vezérlés végrehajtja a csak ha az állapot visszatér .
- Abban az esetben, ha az állapot úgy értékeli akkor az SQL kihagyja a , és elkezdi végrehajtani az „END IF” blokk melletti kódot.
Jegyzet: Ha a feltétel értéke 'NULL', akkor az SQL a 'NULL' értéket 'HAMIS'-ként kezeli.
Példa 1: Ebben a példában egy üzenetet fogunk nyomtatni, ha a szám nagyobb, mint 100. Ehhez a következő kódot hajtjuk végre
Üzenet kinyomtatásához, ha egy szám értéke 100-nál nagyobb, a következő kódot hajtjuk végre.
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; /
Kód magyarázata:
- 2. kódsor: Az 'a' változó 'NUMBER' adattípusként való deklarálása és inicializálása '10' értékkel.
- 4. kódsor: A „Program indulva” utasítás kinyomtatása.
- 5. kódsor: A feltétel ellenőrzése, hogy az „a” változó nagyobb-e, mint „100”.
- 6. kódsor: Ha az „a” nagyobb, mint „100”, akkor „a nagyobb, mint 100” lesz kinyomtatva. Ha 'a' kisebb vagy egyenlő, mint 100, akkor a feltétel meghiúsul, ezért a fenti nyomtatási utasítás figyelmen kívül marad.
- 8. kódsor: „A program befejeződött” nyilatkozat kinyomtatása.
Kód kimenet:
Program started. Program completed.
Példa 2: Ebben a példában egy üzenetet fogunk nyomtatni, ha egy adott ábécé szerepel az angol magánhangzókban (A, E, I, O, U).
Üzenet kinyomtatásához, ha az adott karakter magánhangzó, a következő kódot hajtjuk végre.
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; /
Kód magyarázata:
- 2. kódsor: Az „a” változó „1” méretű „CHAR”-ként való deklarálása és „u” értékkel történő inicializálása.
- 4. kódsor: A feltétel ellenőrzése, hogy az 'a' változó szerepel-e a listában ('A', 'E', 'I', 'O', 'U').
- Az „a” értékét a rendszer nagybetűssé alakította az összehasonlítás előtt, így az összehasonlítás nem tesz különbséget a kis- és nagybetűk között.
- 5. kódsor: Ha az „a” szerepel a listában, akkor a „A karakter angol magánhangzókban van” kiírás kerül kinyomtatásra. Ha a feltétel nem sikerült, akkor ez a program nem ad semmilyen kimenetet, mivel az IF-THEN blokkon kívül nem adtunk ki nyomtatási utasítást.
Kód kimenet:
The character is in English Vowels
HA-AKKOR-MÁS nyilatkozat
- Az IF-THEN-ELSE utasítás főként két alternatíva közötti választásra szolgál a feltétel alapján.
- Az alábbiakban az IF-THEN-ELSE utasítás szintaxisábrázolása látható.
Az IF-THEN-ELSE utasítások szintaxisa:
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;
- A fenti szintaxisban az 'IF' kulcsszót egy feltétel követi, amelynek kiértékelése 'TRUE'/'FALSE'.
- A vezérlés végrehajtja a csak ha az állapot visszatér .
- Állapot esetén úgy értékeli akkor az SQL lefut .
- Mindenesetre a két akcióblokk egyike végrehajtásra kerül.
Jegyzet: Amikor a feltétel értéke 'NULL', akkor az SQL a 'NULL' értéket 'FALSE'-ként kezeli.
Példa 1: Ebben a példában egy üzenetet fogunk nyomtatni, függetlenül attól, 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 number1); END IF; dbms_output.put_line (‘Program completed.’); END; /
Kód magyarázata:
- 2. kódsor: Az 'a' változó 'NUMBER' adattípusként való deklarálása és inicializálása '11' értékkel.
- 4. kódsor: A „Program indulva” utasítás kinyomtatása.
- 5. kódsor: Annak feltételének ellenőrzése, hogy az 'a' változó modulusa '2'-vel 0-e.
- 6. kódsor: Ha „0”, akkor „a páros szám” lesz kinyomtatva.
- 7. kódsor: Ha a modulus értéke nem egyenlő '0'-val, akkor a feltétel visszatér , így az „a páratlan szám” üzenet kerül kinyomtatásra.
- 10-es kódsor: „A program befejeződött” nyilatkozat kinyomtatása
Kód kimenet:
Program started. a is odd number Program completed.
IF-THEN-ELSIF nyilatkozat
- Az IF-THEN-ELSIF utasítást főként ott használják, ahol egy alternatívát kell választani az alternatívák halmazából, ahol minden alternatívának megvannak a saját feltételei, amelyeket teljesíteni kell.
- Az első feltételek, amelyek visszatérnek végrehajtásra kerül, és a fennmaradó feltételek kimaradnak.
- Az IF-THEN-ELSIF utasítás tartalmazhat 'ELSE' blokkot. Ez az 'ELSE' blokk végrehajtásra kerül, ha egyik feltétel sem teljesül.
Megjegyzések: Az ELSE blokk nem kötelező ebben a feltételes utasításban. Ha nincs ELSE blokk, és egyik feltétel sem teljesül, akkor a vezérlő kihagyja az összes műveleti blokkot, és elkezdi végrehajtani a kód fennmaradó részét.
Az IF-THEN-ELSIF utasítások szintaxisa:
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;
- A fenti szintaxisban a vezérlő végrehajtja a csak akkor, ha a feltétel1 visszatér .
- Ha az 1. feltétel nem teljesül, akkor a vezérlő ellenőrzi a 2. feltételt.
- A vezérlő a következő két esetben lép ki az IF utasításból.
- Amikor a vezérlő olyan állapotot talált, amely visszatér . Ebben az esetben a megfelelő action_block végrehajtásra kerül, és a vezérlő kilép ebből az IF-utasítás blokkból, és megkezdi a fennmaradó kód végrehajtását.
- Ha egyik feltétel sem teljesül, akkor a vezérlő ELSE blokkot hajt végre, ha van, majd kilép az IF utasításból.
Jegyzet: Amikor a feltétel értéke 'NULL', akkor az SQL a 'NULL' értéket 'FALSE'-ként kezeli.
Példa 1: ELSE blokk nélkül
Ebben a példában a megadott jegyek alapján más feltétel nélkül nyomtatjuk ki az osztályzatot (>= 70 A érdemjegy, >=40 és 70 B osztályzat, >=35 és 40 C osztályzat).
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; /
Kód magyarázata:
- 2. kódsor: A 'mark' változó 'NUMBER' adattípusként való deklarálása és inicializálása '55' értékkel.
- 4. kódsor: A „Program indulva” utasítás kinyomtatása.
- 5. kódsor: A feltétel1 ellenőrzése, hogy a „jel” nagyobb vagy egyenlő-e 70-el.
- 7. kódsor: Mivel a feltétel1 meghiúsult, a feltétel2 '70>mark>=40' be van jelölve.
- 8. kódsor: A feltétel2 visszatér , ezért a „B fokozat” üzenet kerül kinyomtatásra.
- 12-es kódsor: „A program befejezve” kiírás kinyomtatása.
- Ebben az esetben a feltétel3 'jel < 35' kimarad, mivel a vezérlő talált egy feltételt, amely visszatér feltétel előtt3.
Kód kimenet:
Program started. Grade B Program completed.
Példa 2: ELSE blokkal
Ebben a példában kinyomtatjuk az adott jegyek alapján az egyéb feltétellel (>= 70 A osztályzat, jelölés >=40 és jelölés<70 B osztályzat, jelölés >=35 és jelölés<40 C osztály, különben „Nincs osztályzat”).
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; /
Kód magyarázata:
- 2. kódsor: A 'mark' változó 'NUMBER' adattípusként való deklarálása és inicializálása '25' értékkel.
- 4. kódsor: A „Program indulva” utasítás kinyomtatása.
- 5. kódsor: Az 1. feltétel ellenőrzése, hogy a „jel” nagyobb-e vagy egyenlő 70-el.
- 7. kódsor: Mivel a feltétel1 meghiúsult, a feltétel2 '70>mark>=40' be van jelölve.
- 8. kódsor: Mivel a feltétel2 meghiúsult, a feltétel3 '40>mark>=35' be van jelölve.
- 11. kódsor: Mivel az összes feltétel nem teljesült, a vezérlő most ellenőrzi az ELSE blokk jelenlétét, és kiírja a „No Grade” üzenetet az ELSE blokkból.
- 14-es kódsor: „A program befejezve” kiírás kinyomtatása.
Kód kimenet:
Program started. No Grade Program completed.
NESTED-IF nyilatkozat
- A NESTED-IF utasítás alapvetően lehetővé teszi a programozóknak, hogy egy vagy több „IF” feltételt helyezzenek el egy másik „IF” feltételen belül. a normál kijelentéseken kívül.
- Minden „IF” feltételnek külön „END IF” utasítással kell rendelkeznie, amely az adott feltétel hatókörének végét jelzi. .
- Az „IF” utasítás a legközelebbi „END IF” utasítást veszi figyelembe az adott feltétel végpontjaként.
- A NESTED-IF képi ábrázolása az alábbi diagramon látható.
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
Szintaxis magyarázata:
- A fenti szintaxisban a külső IF még egy IF utasítást tartalmaz a műveletblokkban.
- A feltétel1 visszatér , akkor a vezérlés végrehajtásra kerül és ellenőrzi a feltételt1.
- Ha a feltétel2 is visszatér , akkor ki is fogják végezni.
- A feltétel2 esetén kiértékelődik akkor az SQL kihagyja a .
Itt egy példát fogunk látni a Nested If-re -
Példa beágyazott-If utasításra: A három közül a legnagyobb
Ebben a példában a három szám közül a legnagyobbat fogjuk kiírni a Nested-If utasítás használatával. A számok a deklarációs részben lesznek hozzárendelve, ahogy az alábbi kódban is látható, azaz Szám= 10,15 és 20, és a maximális szám beolvasása beágyazott if utasításokkal történik.
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; /
Kód magyarázata:
- 2. kódsor: Az 'a' változó 'NUMBER' adattípusként való deklarálása és inicializálása '10' értékkel.
- 3. kódsor: A 'b' változó 'NUMBER' adattípusként való deklarálása és inicializálása '15' értékkel.
- 4. kódsor: A 'c' változó 'NUMBER' adattípusként való deklarálása és inicializálása '20' értékkel.
- 6. kódsor: A „Program indulva” (6. sor) utasítás kinyomtatása.
- 7. kódsor: A feltétel1 ellenőrzése, hogy az 'a' nagyobb-e, mint a 'b' (7. sor).
- 10. kódsor: Ha az „a” nagyobb, mint a „b”, akkor a „nested-if 1” feltétele ellenőrzi, hogy „a” nagyobb-e, mint „c” (10. sor).
- 13. kódsor: Ha továbbra is az „a” nagyobb, akkor az „A legnagyobb” üzenet kerül kinyomtatásra (11. sor). Ellenkező esetben, ha a 2. feltétel sikertelen, akkor a „C a legnagyobb” szöveg kerül kinyomtatásra (13. sor).
- 18. kódsor: Abban az esetben, ha a feltétel1 false értéket ad vissza, akkor a 'beágyazott-if 2' feltétele ellenőrzi, hogy a 'b' nagyobb-e, mint a 'c' (18. sor).
- 21-es kódsor: Ha a 'b' nagyobb, mint 'c', akkor a 'B a legnagyobb' üzenet kerül kinyomtatásra (19. sor), ha pedig a 2. feltétel nem sikerül, akkor a 'C a legnagyobb' üzenet kerül kinyomtatásra (21. sor).
- 24-es kódsor: „A program befejeződött” (24. sor) nyilatkozat kinyomtatása.
Kód kimenete:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Összegzésként
Ebben a fejezetben megismertük a különböző döntéshozatali állításokat és azok szintaxisát és példáit. Az alábbi táblázat összefoglalja az általunk tárgyalt különféle feltételes állításokat.
TYPE | LEÍRÁS | HASZNÁLAT |
---|---|---|
HA AKKOR | Ellenőrzi a logikai feltételt, ha a 'THEN' blokkban lévő TRUE kód végrehajtásra kerül. | Egy adott kód kihagyása/végrehajtása a feltétel alapján. |
HA-AKKOR-MÁS | Ellenőrzi, hogy van-e logikai feltétel, ha a 'THEN' blokkban lévő TRUE kód végrehajtásra kerül, ha az 'ELSE' blokkban hamis kód kerül végrehajtásra. | A legmegfelelőbb „EZ-VAGY-AZ” állapotban. |
HA-AKKOR-ELSIF | Sorozati sorrendben ellenőrzi a logikai feltételt. A sorozat első blokkja, amely IGAZ feltételt ad vissza, végrehajtásra kerül. Ha a sorozat egyik feltétele sem IGAZ, akkor az 'ELSE' blokkban lévő kód végrehajtásra kerül. | Általában kettőnél több alternatíva közül lehet választani. |
FÉSZESÍTETT-HA | Lehetővé tesz egy vagy több IF-THEN vagy IF-THEN-ELSIF utasítást egy másik IF-THEN vagy IF-THEN-ELSIF utasításon belül. | Főleg beágyazott állapotban használatos. |