Oracle PL / SQL AK POTOM INÉ Vyhlásenie: ELSIF, NESTED-IF

Obsah:

Anonim

Čo sú vyhlásenia o rozhodovaní?

Rozhodovacie výroky sú tie, ktoré rozhodnú o riadení toku príkazov SQL na základe podmienok. Poskytuje programátorovi lepšiu kontrolu nad zabránením vykonania konkrétneho kódu (diagram 1) alebo výberom požadovaného kódu na základe podmienky (diagram 2). Ďalej je uvedené obrázkové znázornenie „Vyhlásenia o rozhodovaní“.

Diagram vyhlásenia o rozhodovaní

Druhy výrokov rozhodovania:

Spoločnosť Oracle poskytuje nasledujúce typy vyhlásení o rozhodovaní.

  • AK POTOM
  • AK-POTOM INAK
  • AK-POTOM ELSIF
  • NESTED-IF
  • PRÍPAD
  • HĽADANÝ PRÍPAD

V tomto návode sa naučíte

  • Úvod do rozhodovacích výrokov
  • Vyhlásenie IF-THEN
  • Vyhlásenie IF-THEN-ELSE
  • Vyhlásenie IF-THEN-ELSIF
  • Vyhlásenie NESTED-IF

Vyhlásenie IF-THEN

Príkaz IF-THEN sa používa hlavne na vykonanie konkrétnej časti kódov, iba ak je splnená podmienka.

Podmienka by mala mať hodnotu Boolean (True / False). Je to základné podmienené vyhlásenie, ktoré umožní systému ORACLE vykonať / preskočiť konkrétny kus kódu na základe vopred určených podmienok.

Syntax pre IF THEN vyhlásenia:

IF THEN-executed only if the condition returns TRUEEND if;
  • Vo vyššie uvedenej syntaxi bude za kľúčovým slovom „IF“ nasledovať podmienka, ktorá bude vyhodnotená ako „TRUE“ / „FALSE“.
  • Ovládací prvok vykoná iba vtedy, ak podmienka vráti .
  • V prípade, že podmienka bude vyhodnotená ako , potom SQL preskočí a spustí vykonávanie kódu vedľa bloku „END IF“.

Poznámka: Kedykoľvek bude podmienka vyhodnotená ako „NULL“, bude SQL považovať „NULL“ za „FALSE“.

Príklad 1 : V tomto príklade vytlačíme správu, keď je číslo väčšie ako 100. Z tohto dôvodu vykonáme nasledujúci kód

Ak chcete vytlačiť správu, ak má číslo hodnotu vyššiu ako 100, vykonáme nasledujúci kód.

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;/

Vysvetlenie kódu:

  • Riadok kódu 2: Deklarovanie premennej 'a' ako dátového typu 'NUMBER' a jej inicializácia s hodnotou '10'.
  • Riadok kódu 4: Tlač vyhlásenia „Program spustený“.
  • Riadok kódu 5: Kontrola stavu, či je premenná „a“ väčšia ako „100“.
  • Riadok kódu 6: Ak je „a“ väčšie ako „100“, vytlačí sa „a je väčšie ako 100“. Ak je hodnota „a“ menšia alebo rovná 100, podmienka zlyhá, takže vyššie uvedený príkaz na tlač sa ignoruje.
  • Riadok kódu 8: Tlač výpisu „Program je dokončený“.

Výstup kódu:

Program started.Program completed. 

Príklad 2: V tomto príklade vytlačíme správu, ak je daná abeceda prítomná v anglických samohláskach (A, E, I, O, U).

Ak chcete vytlačiť správu, keď je daným znakom samohláska, vykonáme nasledujúci kód.

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;/

Vysvetlenie kódu:

  • Riadok kódu 2: Deklarovanie premennej „a“ ako „CHAR“ údajového typu „1“ a jej inicializácia hodnotou „u“.
  • Riadok kódu 4: Kontrola stavu, či je v zozname premenná „a“ („A“, „E“, „I“, „O“, „U“).
  • Hodnota „a“ bola pred porovnaním prevedená na veľké písmená, aby sa pri porovnávaní nerozlišovali malé a veľké písmená.
  • Riadok kódu 5: Ak je v zozname uvedené písmeno „a“, vytlačí sa vyhlásenie „Znak je v anglickom samohláske“. Ak podmienka zlyhala, potom tento program neposkytne žiadny výstup, pretože mimo bloku IF-THEN sme nevydali žiadny tlačový výpis.

Výstup kódu:

The character is in English Vowels

Vyhlásenie IF-THEN-ELSE

  • Príkaz IF-THEN-ELSE sa používa hlavne na výber medzi dvoma alternatívami na základe podmienky.
  • Ďalej je uvedená syntaxová reprezentácia príkazu IF-THEN-ELSE.

Syntax príkazov IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Vo vyššie uvedenej syntaxi bude za kľúčovým slovom „IF“ nasledovať podmienka, ktorá bude vyhodnotená ako „TRUE“ / „FALSE“.
  • Ovládací prvok vykoná , iba ak podmienka vráti .
  • V prípade, že podmienka bude vyhodnotená ako , potom SQL vykoná .
  • V každom prípade sa vykoná jeden z dvoch akčných blokov.

Poznámka: Kedykoľvek sa podmienka vyhodnotí ako „NULL“, bude SQL považovať „NULL“ za „FALSE“.

Príklad 1 : V tomto príklade vytlačíme správu, či je dané číslo nepárne alebo párne.

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;/

Vysvetlenie kódu:

  • Riadok kódu 2: Deklarovanie premennej „a“ ako dátového typu „NUMBER“ a jej inicializácia s hodnotou „11“.
  • Riadok kódu 4: Tlač vyhlásenia „Program spustený“.
  • Riadok kódu 5: Kontrola stavu, či je modul premennej „a“ o „2“ 0.
  • Riadok kódu 6: Ak je „0“, vytlačí sa „a párne číslo“.
  • Riadok kódu 7: Ak hodnota modulu nie je rovná „0“, potom podmienka vráti hodnotu , takže sa vytlačí správa „a je nepárne číslo“.
  • Riadok kódu10: Tlač výpisu „Program je dokončený“

Výstup kódu:

Program started.a is odd numberProgram completed. 

Vyhlásenie IF-THEN-ELSIF

  • Výrok IF-THEN-ELSIF sa používa hlavne tam, kde by sa mala zvoliť jedna alternatíva zo súboru alternatív, kde každá alternatíva má svoje vlastné podmienky, ktoré majú byť splnené.
  • Vykonajú sa prvé podmienky, ktoré vrátia hodnotu , a zvyšné podmienky sa preskočia.
  • Príkaz IF-THEN-ELSIF môže v ňom obsahovať blok 'ELSE'. Tento blok „ELSE“ sa vykoná, ak nie je splnená žiadna z podmienok.

Poznámka : Blok ELSE je v tomto podmienenom príkaze voliteľný. Ak nie je blok ELSE a nie je splnená žiadna z podmienok, potom radič preskočí celý akčný blok a začne vykonávať zvyšnú časť kódu.

Syntax príkazov IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Vo vyššie uvedenej syntaxi ovládací prvok vykoná , iba ak podmienka1 vráti .
  • Ak podmienka 1 nie je splnená, potom kontrolór skontroluje podmienku 2.
  • Kontrolór opustí vyhlásenie IF v nasledujúcich dvoch prípadoch.
    • Keď radič našiel každú podmienku, ktorá vráti . V takom prípade sa vykoná zodpovedajúci blok akcie a riadiaca jednotka opustí tento blok vyhlásenia IF a začne vykonávať zvyšný kód.
    • Ak nie je splnená žiadna z podmienok, vtedajší radič vykoná blok ELSE, ak je k dispozícii, potom vystúpi z vyhlásenia IF.

Poznámka: Kedykoľvek sa podmienka vyhodnotí ako „NULL“, bude SQL považovať „NULL“ za „FALSE“.

Príklad 1: Bez bloku ELSE

V tomto príklade budeme tlačiť známku na základe daných známok bez podmienky else (známka> = 70 známka A, známka> = 40 a známka <70 známka B, známka> = 35 a známka <40 známka C).

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;/

Vysvetlenie kódu:

  • Riadok kódu 2: Deklarácia premennej „mark“ ako dátového typu „NUMBER“ a jej inicializácia s hodnotou „55“.
  • Riadok kódu 4: Tlač vyhlásenia „Program spustený“.
  • Riadok kódu 5: Kontrola podmienky1, či je „známka“ väčšia alebo rovná 70.
  • Riadok kódu 7: Pretože podmienka1 zlyhala, je skontrolovaná podmienka270> značka> = 40.
  • Riadok kódu 8: Podmienka2 vráti , preto sa vytlačí správa „Stupeň B“.
  • Riadok kódu12: Tlač výpisu „Program je dokončený“.
  • V takom prípade bude značka condition3 '<35' preskočená, pretože radič našiel jednu podmienku, ktorá vráti pred podmienkou3.

Výstup kódu:

Program started.Grade BProgram completed.

Príklad 2 : S ELSE blokom

V tomto príklade budeme tlačiť známku na základe daných známok s podmienkou else (známka> = 70 známka A, známka> = 40 a známka <70 známka B, známka> = 35 a známka <40 známka C, inak „Žiadny stupeň“).

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;/

Vysvetlenie kódu:

  • Riadok kódu 2: Deklarácia premennej „mark“ ako dátového typu „NUMBER“ a jej inicializácia s hodnotou „25“.
  • Riadok kódu 4: Tlač vyhlásenia „Program spustený“.
  • Riadok kódu 5: Kontrola podmienky 1, či je „známka“ väčšia alebo rovná 70.
  • Riadok kódu 7: Pretože podmienka1 zlyhala, je skontrolovaná podmienka270> značka> = 40.
  • Riadok kódu 8: Pretože podmienka2 zlyhala, je skontrolovaná podmienka3 '40> značka> = 35 '.
  • Riadok kódu 11: Pretože všetky podmienky zlyhali, riadenie teraz skontroluje prítomnosť bloku ELSE a z bloku ELSE vytlačí správu „No Grade“.
  • Riadok kódu14: Tlač vyhlásenia „Program je dokončený“.

Výstup kódu:

Program started.No GradeProgram completed.

Vyhlásenie NESTED-IF

  • Príkaz NESTED-IF je v zásade povolený programátorom umiestniť jednu alebo viac podmienok typu „IF“ do iného stavu iného ako „IF“ okrem iných príkazov.
  • Každá podmienka „IF“ by mala mať samostatné vyhlásenie „END IF“, ktoré označuje koniec rozsahu pôsobnosti konkrétnej .
  • Výrok „IF“ bude považovať najbližší výrok „END IF“ za koncový bod pre konkrétny stav.
  • Obrázkové znázornenie NESTED-IF je uvedené nižšie.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Vysvetlenie syntaxe:
  • Vo vyššie uvedenej syntaxi obsahuje vonkajší IF vo svojom akčnom bloku ešte jeden príkaz IF.
  • Podmienka1 vráti , potom ovládací prvok vykoná a skontroluje podmienku2.
  • Ak podmienka2 vráti aj , potom sa vykoná aj .
  • V prípade, že podmienka2 bude vyhodnotená ako , potom SQL vynechá .

Tu uvidíme príklad vnoreného, ​​ak -

Príklad vnoreného - Ak je vyhlásenie: Najväčšie z troch čísel

V tomto príklade vytlačíme najväčšie z troch čísel pomocou príkazu Nested-If. Čísla budú priradené v deklaračnej časti, ako vidíte v nižšie uvedenom kóde, tj Number = 10,15 a 20 a maximálny počet bude načítaný pomocou príkazov nested-if.

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;/

Vysvetlenie kódu:

  • Riadok kódu 2: Deklarovanie premennej 'a' ako dátového typu 'NUMBER' a jej inicializácia s hodnotou '10'.
  • Riadok kódu 3: Deklarácia premennej „b“ ako dátového typu „NUMBER“ a jej inicializácia s hodnotou „15“.
  • Riadok kódu 4: Deklarácia premennej „c“ ako dátového typu „NUMBER“ a jej inicializácia s hodnotou „20“.
  • Riadok kódu 6: Tlač výpisu „Program spustený“ (riadok 6).
  • Riadok kódu 7: Kontrola podmienky1, či je „a“ väčšie ako „b“ (riadok 7).
  • Riadok kódu 10: Ak je „a“ väčšie ako „b, potom podmienka v položke„ nested-if 1 “skontroluje, či je„ a “väčšie ako„ c “(riadok 10).
  • Riadok kódu 13: Ak je stále „a“ väčšie, vytlačí sa správa „A je najväčšie“ (riadok 11). Pokiaľ nie je splnená podmienka 2, vytlačí sa „C je najväčšie“ (riadok 13).
  • Riadok kódu 18: V prípade, že podmienka1 vráti hodnotu false, potom podmienka v poli „nested-if 2“ skontroluje, či je „b“ väčšie ako „c“ (riadok 18).
  • Riadok kódu 21: Ak je „b“ väčšie ako „c“, vytlačí sa správa „B je najväčšie“ (riadok 19), inak ak zlyhá podmienka 2, vytlačí sa „C je najväčšie“ (riadok 21).
  • Riadok kódu 24: Tlač výkazu „Program bol dokončený“ (riadok 24).

Výstup kódu:

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

Zhrnutie

V tejto kapitole sme sa naučili rôzne rozhodovacie výroky, ich syntax a príklady. V nasledujúcej tabuľke je uvedený súhrn rôznych podmienených tvrdení, o ktorých sme hovorili.

TYP

POPIS

POUŽITIE

AK POTOM

Skontroluje boolovskú podmienku, ak sa v bloku „THEN“ vykoná TRUE kód.

Ak chcete preskočiť, / vykonať konkrétny kód na základe podmienky.

AK-POTOM INAK

Skontroluje booleovskú podmienku, ak sa vykoná TRUE kód v bloku „THEN“, ak sa vykoná falošný kód v bloku „ELSE“.

Najvhodnejšie v stave „TOTO ALEBO TOTO“.

AK-POTOM ELSIF

Skontroluje boolovský stav v postupnom poradí. Prvý blok v poradí, ktorý vráti podmienku TRUE, sa vykoná. Ak žiadna z podmienok v poradí nie je TRUE, vykoná sa kód v bloku „ELSE“.

Používa sa väčšinou na výber z viac ako dvoch alternatív.

NESTED-IF

Umožňuje jeden alebo viac vyhlásení IF-THEN alebo IF-THEN-ELSIF v rámci iných vyhlásení IF-THEN alebo IF-THEN-ELSIF.

Používa sa hlavne v vnorených podmienkach.