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ó.

Döntéshozatali nyilatkozat diagram
Döntéshozatali nyilatkozat diagram

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ó.

NESTED-IF nyilatkozat

NESTED-IF nyilatkozat

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.