Oracle PL / SQL IF AKKOR MÁS utasítás: ELSIF, NESTED-IF

Tartalomjegyzék:

Anonim

Mik a döntéshozó nyilatkozatok?

A döntéshozó utasítások azok, akik a feltételek alapján döntenek az SQL utasítások folyamatirányításáról. Jobb kontrollt ad a programozónak, hogy megakadályozza-e egy adott kód végrehajtását (1. ábra), vagy a feltétel alapján kiválassza a kívánt kódot (2. ábra). Az alábbiakban a "Döntéshozatali nyilatkozat" képi ábrázolása látható.

Döntéshozatali nyilatkozat diagram

A döntéshozatali nyilatkozatok típusai:

Az Oracle a következő típusú döntési nyilatkozatokat biztosítja.

  • HA AKKOR
  • HA-AKKOR MÁS
  • HA-AKKOR ELSIF
  • NESTED-IF
  • ÜGY
  • KERESETT ESET

Ebben az oktatóanyagban megtanulja-

  • Bevezetés a döntéshozatali nyilatkozatokba
  • IF-AKKOR Nyilatkozat
  • IF-THEN-EGYÉB nyilatkozat
  • IF-THEN-ELSIF nyilatkozat
  • NESTED-IF nyilatkozat

IF-AKKOR Nyilatkozat

Az IF-THEN utasítás főleg egy adott kódrész végrehajtására szolgál, csak ha a feltétel teljesül.

A feltételnek logikai értéket kell adnia (igaz / hamis). Ez egy alapvető feltételes utasítás, amely lehetővé teszi az ORACLE számára, hogy az előre meghatározott feltételek alapján végrehajtson / kihagyjon egy adott kódrészletet.

Szintaxis az IF THEN utasításokhoz:

IF THEN-executed only if the condition returns TRUEEND if;
  • A fenti szintaxisban az „IF” kulcsszót egy feltétel követi, amelynek értéke „IGAZ” / „HAMIS”.
  • A vezérlő csak akkor hajtja végre az elemet, ha a feltétel visszaadja az TRUE értéket.
  • Abban az esetben, ha a feltétel értéke , akkor az SQL kihagyja az elemet, és elkezdi végrehajtani a kódot az 'END IF' blokk mellett.

Megjegyzés: Amikor a feltétel értéke „NULL”, az SQL a „NULL” -t „FALSE” -ként kezeli.

1. példa : Ebben a példában üzenetet fogunk kinyomtatni, 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 meghaladja a 100 értéket, végrehajtjuk a következő kódot.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Kód Magyarázat:

  • 2. kódsor: Az „a” változó deklarálása „NUMBER” típusú adattípusként és inicializálása „10” értékkel.
  • 4. kódsor: A "Program elindult" utasítás kinyomtatása.
  • 5. kódsor: Annak ellenőrzése, hogy az „a” változó nagyobb-e mint „100”.
  • 6. kódsor: Ha az „a” nagyobb, mint „100”, akkor az „a nagyobb, mint 100” lesz kinyomtatva. Ha az 'a' értéke kisebb vagy egyenlő, mint 100, akkor a feltétel sikertelen, ezért a fenti nyomtatási utasítás figyelmen kívül marad.
  • 8. kódsor: A "Program befejezve" utasítás nyomtatása.

Kód kimenet:

Program started.Program completed. 

2. példa: Ebben a példában üzenetet fogunk kinyomtatni, ha egy adott ábécé angol magánhangzókban szerepel (A, E, I, O, U).

Üzenet kinyomtatásához, amikor az adott karakter magánhangzó, a következő kódot hajtjuk végre.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_output.put_line(‘The character is in English Vowels');END IF;END;/

Kód Magyarázat:

  • 2. kódsor : Az „a” változó „CHAR” -ként való deklarálása az „1” méretű adattípusból és inicializálása „u” értékkel.
  • 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éket az összehasonlítás előtt nagybetűvé alakították, hogy az összehasonlítás kis- és nagybetűkre érzékeny legyen.
  • 5. kódsor: Ha az 'a' szerepel a listán, akkor a „A karakter angol magánhangzókkal” állítás kerül kinyomtatásra. Ha a feltétel nem sikerült, akkor ez a program nem ad kimenetet, mivel az IF-THEN blokkon kívül nem adtunk ki nyomtatási nyilatkozatot.

Kód kimenet:

The character is in English Vowels

IF-THEN-EGYÉB nyilatkozat

  • Az IF-THEN-ELSE állítást elsősorban a feltétel alapján két alternatíva közötti választásra használják.
  • Az alábbiakban bemutatjuk az IF-THEN-ELSE utasítás szintaxisát.

Szintaxis az IF-THEN-ELSE utasításokhoz:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • A fenti szintaxisban az „IF” kulcsszót egy feltétel követi, amelynek értéke „IGAZ” / „HAMIS”.
  • A vezérlő csak akkor hajtja végre az elemet, ha a feltétel visszaadja az TRUE értéket.
  • Ha a feltétel értéke , akkor az SQL végrehajtja a parancsot.
  • Mindenesetre a két műveletblokk közül az egyik végrehajtásra kerül.

Megjegyzés: Amikor a feltétel értéke „NULL”, az SQL a „NULL” -t „FALSE” -ként kezeli.

1. példa : Ebben a példában üzenetet fogunk kinyomtatni, függetlenül attól, hogy az adott szám páratlan vagy páros-e.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_output.put_line('a is odd number1);END IF;dbms_output.put_line (‘Program completed.’);END;/

Kód Magyarázat:

  • 2. kódsor: Az „a” változó deklarálása „NUMBER” típusú adattípusként és inicializálása „11” értékkel.
  • 4. kódsor: A "Program elindult" utasítás kinyomtatása.
  • 5. kódsor: Annak ellenőrzése, hogy a '2' értékű 'a' változó modulusa 0-e.
  • 6. kódsor: Ha „0”, akkor az „a páros szám” lesz nyomtatva.
  • 7. kódsor: Ha a modulus értéke nem egyenlő „0” -val, akkor a feltétel értéket ad vissza, így az „a páratlan szám” üzenet kerül kinyomtatásra.
  • 10. kódsor: A "Program befejezve" utasítás nyomtatása

Kód kimenet:

Program started.a is odd numberProgram completed. 

IF-THEN-ELSIF nyilatkozat

  • Az IF-THEN-ELSIF állítást főként ott alkalmazzák, ahol egy alternatívát kell választani egy sor alternatívából, ahol minden alternatívának meg kell felelni a saját feltételeinek.
  • Az első feltételek, amelyek visszaadják az IGAZ értéket, végrehajtásra kerülnek, a fennmaradó feltételek pedig átugrásra kerülnek.
  • Az IF-THEN-ELSIF utasítás tartalmazhat „ELSE” blokkot. Ez az „ELSE” blokk akkor kerül végrehajtásra, ha egyik feltétel sem teljesül.

Megjegyzés : 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űveletblokkot és elkezdi végrehajtani a kód fennmaradó részét.

Szintaxis az IF-THEN-ELSIF utasításokhoz:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • A fenti szintaxisban a vezérlő csak akkor hajtja végre az elemet, ha az1 feltétel értéket ad vissza.
  • 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 kilép az IF-utasításból.
    • Amikor a vezérlő olyan feltételeket talált, amelyek visszaadják az értéket. Ebben az esetben a megfelelő action_block végrehajtásra kerül, és a vezérlő kilép az IF-utasítás blokkból, és elkezdi futtatni a fennmaradó kódot.
    • Ha egyik feltétel sem teljesül, akkor az akkori vezérlő végrehajtja az ELSE blokkot, ha van, majd kilép az IF utasításból.

Megjegyzés: Amikor a feltétel értéke „NULL”, az SQL a „NULL” -t „FALSE” -ként kezeli.

1. példa: ELSE blokk nélkül

Ebben a példában az érdemjegyet az adott jegyek alapján más feltétel nélkül fogjuk kinyomtatni (jelölés> = 70 A fokozat,>> 40 és <70 B osztály, mark> = 35 és <40 C osztály).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C’);END IF;dbms_output.put_line(‘Program completed.’);END;/

Kód Magyarázat:

  • 2. kódsor: A „mark” változó deklarálása „NUMBER” típusú adattípusként és inicializálása „55” értékkel.
  • 4. kódsor: A "Program elindult" utasítás kinyomtatása.
  • 5. kódsor: Az 1. feltétel ellenőrzése, hogy a „jelölés” nagyobb vagy egyenlő-e 70-vel.
  • 7. kódsor: Mivel az 1. feltétel meghiúsult, akkor a2 feltétel 70 'jelölés> = 40' be van jelölve.
  • 8. kódsor: A 2. feltétel visszaadja az IGAZ> értéket, ezért a „B fokozat” üzenet kerül kinyomtatásra.
  • 12. kódsor: A "Program befejezve" utasítás nyomtatása.
  • Ebben az esetben a feltétel3 'jel <35' kihagyásra kerül, mivel a vezérlő talált egy feltételt, amely <3> értéket ad vissza a 3. feltétel előtt.

Kód kimenet:

Program started.Grade BProgram completed.

2. példa : ELSE blokkkal

Ebben a példában az osztályzatot az adott jegyek alapján más feltételekkel fogjuk kinyomtatni (jelölés> = 70 A fokozat, mark> = 40 és <70 B osztály, mark> = 35 és <40 C osztály, else „Nincs fokozat”).

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_output.put_line(‘No Grade’);END IF;dbms_output.put_line(‘Program completed.' );END;/

Kód Magyarázat:

  • 2. kódsor: A „mark” változó deklarálása „NUMBER” típusú adattípusként és inicializálása „25” értékkel.
  • 4. kódsor: A "Program elindult" utasítás kinyomtatása.
  • 5. kódsor: Az 1. feltétel ellenőrzése, hogy a „jelölés” nagyobb vagy egyenlő-e 70-vel.
  • 7. kódsor: Mivel az 1. feltétel meghiúsult, akkor a2 feltétel 70 'jelölés> = 40' be van jelölve.
  • 8. kódsor: Mivel a 2. feltétel meghiúsult, akkor a feltétel3 '40> mark> = 35 'be van jelölve.
  • 11. kódsor: Mivel az összes feltétel meghiúsult, a vezérlés most ellenőrzi az ELSE blokk meglétét, és kinyomtatja a „No Grade” üzenetet az ELSE blokkból.
  • Kódsor14: A "Program befejezve" utasítás nyomtatása.

Kód kimenet:

Program started.No GradeProgram completed.

NESTED-IF nyilatkozat

  • A NESTED-IF utasítás alapvetően lehetővé teszi a programozók számára, hogy egy vagy több „IF” feltételt elhelyezzenek egy másik „IF” feltétel részén belül, a normál utasításoktól eltérően.
  • Minden „IF” feltételnek külön „END IF” utasítással kell rendelkeznie, amely az adott hatókörének végét jelöli.
  • Az „IF” utasítás a legközelebbi „END IF” utasítást fogja tekinteni az adott feltétel végpontjának.
  • A NESTED-IF képi ábrázolása az alábbi ábrán látható.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Szintaxis Magyarázat:
  • A fenti szintaxisban a külső IF ​​egy további IF utasítást tartalmaz a műveleti blokkjában.
  • Az1 feltétel visszaadja az értéket, majd a vezérlő végrehajtja az parancsot, és ellenőrzi a feltételt2.
  • Ha a feltétel2 is visszaadja az IGAZ> értéket, akkor az is végrehajtásra kerül.
  • Abban az esetben, ha a 2. feltétel értéke , akkor az SQL kihagyja az parancsot.

Itt láthatunk egy példát a Nested If-re -

Példa a beágyazott - ha utasításra: A három szám közül a legnagyobb

Ebben a példában három szám közül a legnagyobbat fogjuk kinyomtatni a Nested-If utasítás használatával. A számokat a bevallás részhez rendeljük, amint az az alábbi kódból is kiderül, azaz Szám = 10,15 és 20, és a maximális számot beágyazott-if utasításokkal fogjuk lekérni.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Kód Magyarázat:

  • 2. kódsor: Az „a” változó deklarálása „NUMBER” típusú adattípusként és inicializálása „10” értékkel.
  • 3. kódsor: A „b” változó deklarálása „NUMBER” típusú adattípusként és inicializálása „15” értékkel.
  • 4. kódsor: A „c” változó deklarálása „NUMBER” típusú adattípusra és inicializálása „20” értékkel.
  • 6. kódsor: A "Program elindult" utasítás nyomtatása (6. sor).
  • 7. kódsor: Az 1. feltétel ellenőrzése, hogy az „a” nagyobb-e mint „b” (7. sor).
  • 10. kódsor: Ha az „a” nagyobb, mint „b”, akkor a „beágyazott-ha 1” feltétel feltételezi, hogy az „a” nagyobb-e, mint „c” (10. sor).
  • 13. kódsor: Ha még mindig nagyobb az „a”, akkor az „A legnagyobb” üzenet kerül kinyomtatásra (11. sor). Egyébként, ha a 2. feltétel sikertelen, akkor a „C a legnagyobb” lesz kinyomtatva (13. sor).
  • 18. kódsor: Abban az esetben, ha az 1. feltétel hamis értéket ad vissza, akkor a 'beágyazott-ha 2-ben' feltétel ellenőrzi, hogy a 'b' nagyobb-e, mint 'c' (18. sor).
  • 21. kódsor: Ha a „b” nagyobb, mint „c”, akkor a „B a legnagyobb” üzenet kerül kinyomtatásra (19. sor), máskülönben, ha a 2. feltétel sikertelen, akkor a „C a legnagyobb” lesz kinyomtatva (21. sor).
  • 24. kódsor: A "Program befejezve" utasítás nyomtatása (24. sor).

A kód kimenete:

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

Összegzés

Ebben a fejezetben megismertük a különböző döntéshozó állításokat, azok szintaxisát és példáit. Az alábbi táblázat összefoglalja a különféle feltételes állításokat, amelyeket megvitattunk.

TÍPUS

LEÍRÁS

HASZNÁLAT

HA AKKOR

Ellenőrzi a logikai feltételt, ha az IGAZ kód végrehajtásra kerül a 'THEN' blokkban.

Ugráshoz / futtasson egy adott kódot a feltétel alapján.

HA-AKKOR MÁS

Boole-feltétel ellenőrzése, ha az IGAZ kód a THEN blokkban végrehajtásra kerül, ha hamis kód kerül végrehajtásra az 'ELSE' blokkban.

Legmegfelelőbb „EZ-VAGY-E” állapotban.

HA-AKKOR ELSIF

Sorrendben ellenőrzi a logikai feltételeket. A sorozat első mondata, amely visszaadja az IGAZ feltételt, végrehajtásra kerül. Ha a szekvencia egyik feltétele sem IGAZ, akkor az 'ELSE' blokkban a kód végrehajtásra kerül.

Több mint két alternatíva közül választhat.

NESTED-IF

Engedélyez egy vagy több IF-THEN vagy IF-THEN-ELSIF utasítást egy másik IF-THEN vagy IF-THEN-ELSIF utasításban.

Főleg beágyazott állapotban használják.