Oracle PL / SQL IF THEN ELSE Prohlášení: ELSIF, NESTED-IF

Obsah:

Anonim

Co jsou prohlášení k rozhodování?

Prohlášení o rozhodování jsou ti, kteří rozhodnou o řízení toku příkazů SQL na základě podmínek. Poskytuje programátorovi lepší kontrolu nad zabráněním spuštění konkrétního kódu (diagram 1) nebo výběrem požadovaného kódu na základě podmínky (diagram 2). Níže je obrázkové znázornění „Prohlášení o rozhodování“.

Diagram prohlášení o rozhodování

Druhy prohlášení pro rozhodování:

Oracle poskytuje následující typy prohlášení o rozhodování.

  • KDYŽ POTOM
  • JESTLIŽE PAK JINAK
  • IF-THEN-ELSIF
  • NESTED-IF
  • PŘÍPAD
  • VYHLEDANÝ PŘÍPAD

V tomto výukovém programu se naučíte

  • Úvod do rozhodovacích prohlášení
  • Prohlášení IF-THEN
  • Prohlášení IF-THEN-ELSE
  • Prohlášení IF-THEN-ELSIF
  • Prohlášení NESTED-IF

Prohlášení IF-THEN

Příkaz IF-THEN se používá hlavně k provedení určité části kódů, pouze když je podmínka splněna.

Podmínka by měla přinést logickou hodnotu (True / False). Jedná se o základní podmíněný příkaz, který umožní ORACLE spustit / přeskočit konkrétní část kódu na základě předdefinovaných podmínek.

Syntaxe příkazu IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • Ve výše uvedené syntaxi bude za klíčovým slovem „IF“ následovat podmínka, která bude vyhodnocena jako „TRUE“ / „FALSE“.
  • Ovládací prvek provede pouze v případě, že podmínka vrátí .
  • V případě, že se podmínka vyhodnotí na , pak SQL přeskočí a začne provádět kód vedle bloku „END IF“.

Poznámka: Kdykoli bude podmínka vyhodnocena jako „NULL“, bude SQL považovat „NULL“ za „FALSE“.

Příklad 1 : V tomto příkladu vytiskneme zprávu, když je číslo větší než 100. Za tímto účelem provedeme následující kód

Chcete-li vytisknout zprávu, pokud má číslo hodnotu větší než 100, provedeme následující 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;/

Vysvětlení kódu:

  • Řádek kódu 2: Deklarace proměnné „a“ jako datového typu „ČÍSLO“ a inicializace s hodnotou „10“.
  • Řádek kódu 4: Tisk prohlášení „Program spuštěn“.
  • Řádek kódu 5: Kontrola podmínky, zda je proměnná „a“ větší než „100“.
  • Řádek kódu 6: Pokud je 'a' větší než '100', vytiskne se „a je větší než 100“. Pokud je hodnota 'a' menší nebo rovna 100, pak podmínka selže, takže výše uvedený příkaz pro tisk byl ignorován.
  • Řádek kódu 8: Tisk prohlášení „Program dokončen“.

Výstup kódu:

Program started.Program completed. 

Příklad 2: V tomto příkladu budeme tisknout zprávu, pokud je daná abeceda přítomna v anglických samohláskách (A, E, I, O, U).

Chcete-li vytisknout zprávu, když je daným znakem samohláska, provedeme následující 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;/

Vysvětlení kódu:

  • Řádek kódu 2: Deklarace proměnné „a“ jako „CHAR“ datového typu „1“ a inicializace s hodnotou „u“.
  • Řádek kódu 4: Kontrola podmínky, zda je v seznamu proměnná „a“ („A“, „E“, „I“, „O“, „U“).
  • Hodnota 'a' byla před porovnáním převedena na velká písmena, aby se při porovnávání nerozlišovala velká a malá písmena.
  • Řádek kódu 5: Pokud je v seznamu přítomen znak „a“, bude vytištěn příkaz „Znak je v angličtině“. Pokud podmínka selhala, pak tento program neposkytne žádný výstup, protože mimo blok IF-THEN jsme nevydali žádné tiskové prohlášení.

Výstup kódu:

The character is in English Vowels

Prohlášení IF-THEN-ELSE

  • Příkaz IF-THEN-ELSE se používá hlavně k výběru mezi dvěma alternativami na základě podmínky.
  • Níže je syntaxe reprezentace příkazu IF-THEN-ELSE.

Syntaxe příkazů IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Ve výše uvedené syntaxi bude za klíčovým slovem „IF“ následovat podmínka, která bude vyhodnocena jako „TRUE“ / „FALSE“.
  • Ovládací prvek provede pouze v případě, že podmínka vrátí .
  • V případě, že se podmínka vyhodnotí na , pak SQL provede .
  • V každém případě bude proveden jeden ze dvou akčních bloků.

Poznámka: Kdykoli se podmínka vyhodnotí jako „NULL“, bude SQL považovat „NULL“ za „FALSE“.

Příklad 1 : V tomto příkladu budeme tisknout zprávu, zda je dané číslo liché nebo sudé.

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

Vysvětlení kódu:

  • Řádek kódu 2: Deklarace proměnné „a“ jako datového typu „NUMBER“ a inicializace s hodnotou „11“.
  • Řádek kódu 4: Tisk prohlášení „Program spuštěn“.
  • Řádek kódu 5: Kontrola podmínky, zda modul proměnné 'a' o '2' je 0.
  • Řádek kódu 6: Je-li „0“, bude vytištěno „a je sudé číslo“.
  • Řádek kódu 7: Pokud hodnota modulu není rovna '0', pak podmínka vrátí , takže se vytiskne zpráva "a je liché číslo".
  • Řádek kódu 10: Tisk prohlášení „Program dokončen“

Výstup kódu:

Program started.a is odd numberProgram completed. 

Prohlášení IF-THEN-ELSIF

  • Příkaz IF-THEN-ELSIF se používá hlavně tam, kde by měla být vybrána jedna alternativa ze sady alternativ, kde každá alternativa má své vlastní podmínky, které mají být splněny.
  • Budou provedeny první podmínky, které vrátí , a zbývající podmínky budou přeskočeny.
  • Příkaz IF-THEN-ELSIF může v něm obsahovat blok 'ELSE'. Tento blok „ELSE“ se provede, pokud není splněna žádná z podmínek.

Poznámka : Blok ELSE je v tomto podmíněném příkazu volitelný. Pokud není k dispozici žádný blok ELSE a žádná z podmínek není splněna, pak řadič přeskočí celý akční blok a začne vykonávat zbývající část kódu.

Syntaxe příkazů IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Ve výše uvedené syntaxi ovládací prvek provede , pouze pokud podmínka1 vrátí .
  • Pokud podmínka 1 není splněna, pak kontrolér zkontroluje podmínku 2.
  • Řídicí jednotka opustí příkaz IF v následujících dvou případech.
    • Když řadič našel jakoukoli podmínku, která vrací . V takovém případě bude proveden odpovídající blok akce a řídicí jednotka ukončí tento blok prohlášení IF a zahájí provádění zbývajícího kódu.
    • Pokud není splněna žádná z podmínek, provede tehdejší řadič blok ELSE, pokud je přítomen, poté opustí příkaz IF.

Poznámka: Kdykoli se podmínka vyhodnotí jako „NULL“, bude SQL považovat „NULL“ za „FALSE“.

Příklad 1: Bez bloku ELSE

V tomto příkladu budeme tisknout známku na základě daných známek bez podmínky 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;/

Vysvětlení kódu:

  • Řádek kódu 2: Deklarace proměnné „mark“ jako datového typu „NUMBER“ a inicializace s hodnotou „55“.
  • Řádek kódu 4: Tisk prohlášení „Program spuštěn“.
  • Řádek kódu 5: Kontrola podmínky1, zda je „značka“ větší nebo rovna 70.
  • Řádek kódu 7: Protože podmínka1 selhala, je zkontrolována podmínka270> značka> = 40.
  • Řádek kódu 8: Podmínka 2 vrací , proto se vytiskne zpráva „Třída B“.
  • Řádek kódu12: Tisk prohlášení „Program dokončen“.
  • V tomto případě bude značka condition3 'značka <35' přeskočena, protože ovladač našel jednu podmínku, která před podmínkou3 vrátí .

Výstup kódu:

Program started.Grade BProgram completed.

Příklad 2 : S ELSE blokem

V tomto příkladu budeme tisknout známku na základě daných známek s podmínkou 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, jinak „No Grade“).

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

Vysvětlení kódu:

  • Řádek kódu 2: Deklarace proměnné 'mark' jako 'NUMBER' datového typu a inicializace s hodnotou '25'.
  • Řádek kódu 4: Tisk prohlášení „Program spuštěn“.
  • Řádek kódu 5: Kontrola podmínky 1, zda je „značka“ větší nebo rovna 70.
  • Řádek kódu 7: Protože podmínka1 selhala, je zkontrolována podmínka270> značka> = 40.
  • Řádek kódu 8: Protože podmínka2 selhala, je zkontrolována podmínka340> značka> = 35.
  • Řádek kódu 11: Vzhledem k tomu, že všechny podmínky selhaly, řízení nyní zkontroluje přítomnost bloku ELSE a z bloku ELSE vytiskne zprávu „No Grade“.
  • Řádek kódu 14: Tisk prohlášení „Program dokončen“.

Výstup kódu:

Program started.No GradeProgram completed.

Prohlášení NESTED-IF

  • Příkaz NESTED-IF je v zásadě umožněn programátorům umístit jeden nebo více stavů „IF“ do jiného stavu jiného než „IF“, než jsou běžné výroky.
  • Každá podmínka „IF“ by měla mít samostatný příkaz „END IF“, který označuje konec oboru dané konkrétní .
  • Příkaz „IF“ bude považovat nejbližší příkaz „END IF“ za koncový bod pro tuto konkrétní podmínku.
  • Obrázkové znázornění NESTED-IF je uvedeno níže.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Vysvětlení syntaxe:
  • Ve výše uvedené syntaxi obsahuje vnější IF ve svém akčním bloku ještě jeden příkaz IF.
  • Podmínka1 vrátí , pak ovládací prvek provede a zkontroluje podmínku2.
  • Pokud podmínka2 také vrátí , pak se provede také .
  • V případě, že se podmínka2 vyhodnotí na , pak SQL přeskočí .

Zde uvidíme příklad Nested If -

Příklad vnořeného příkazu If: Největší ze tří čísel

V tomto příkladu vytiskneme největší ze tří čísel pomocí příkazu Nested-If. Čísla budou přiřazena v deklarační části, jak vidíte v níže uvedeném kódu, tj. Number = 10,15 a 20 a maximální počet bude načten pomocí příkazů 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;/

Vysvětlení kódu:

  • Řádek kódu 2: Deklarace proměnné „a“ jako datového typu „ČÍSLO“ a inicializace s hodnotou „10“.
  • Řádek kódu 3: Deklarace proměnné 'b' jako datového typu 'NUMBER' a inicializace s hodnotou '15'.
  • Řádek kódu 4: Deklarace proměnné „c“ jako datového typu „NUMBER“ a inicializace s hodnotou „20“.
  • Řádek kódu 6: Tisk prohlášení „Program spuštěn“ (řádek 6).
  • Řádek kódu 7: Kontrola podmínky1, zda je „a“ větší než „b“ (řádek 7).
  • Řádek kódu 10: Pokud je 'a' větší než 'b, pak podmínka v' nested-if 1 'zkontroluje, zda' a 'je větší než' c '(řádek 10).
  • Řádek kódu 13: Pokud je stále „a“ větší, vytiskne se zpráva „A je největší“ (řádek 11). Jinak pokud podmínka 2 selže, vytiskne se „C je největší“ (řádek 13).
  • Řádek kódu 18: V případě, že podmínka1 vrátí hodnotu false, pak podmínka v poli „nested-if 2“ zkontroluje, zda je „b“ větší než „c“ (řádek 18).
  • Řádek kódu 21: Je-li „b“ větší než „c“, bude vytištěna zpráva „B je největší“ (řádek 19), jinak pokud podmínka 2 selže, bude vytištěna „C je největší“ (řádek 21).
  • Řádek kódu 24: Tisk prohlášení „Program dokončen“ (řádek 24).

Výstup kódu:

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

souhrn

V této kapitole jsme se naučili různá rozhodovací prohlášení a jejich syntaxi a příklady. Níže uvedená tabulka poskytuje souhrn různých podmíněných příkazů, o kterých jsme diskutovali.

TYP

POPIS

POUŽÍVÁNÍ

KDYŽ POTOM

Zkontroluje booleovskou podmínku, pokud bude spuštěn TRUE kód v bloku „THEN“.

Chcete-li přeskočit, / provést konkrétní kód na základě podmínky.

JESTLIŽE PAK JINAK

Zkontroluje booleovskou podmínku, pokud bude spuštěn TRUE kód v bloku „THEN“, pokud je spuštěn falešný kód v bloku „ELSE“.

Nejvhodnější ve stavu „TENTO NEBO TO“.

IF-THEN-ELSIF

Zkontroluje logickou podmínku v postupném pořadí. Bude proveden první blok v pořadí, který vrací podmínku PRAVDA. Pokud žádná z podmínek v sekvenci není TRUE, provede se kód v bloku 'ELSE'.

Používá se většinou k výběru z více než dvou alternativ.

NESTED-IF

Umožňuje jeden nebo více příkazů IF-THEN nebo IF-THEN-ELSIF uvnitř jiného příkazu IF-THEN nebo IF-THEN-ELSIF.

Používá se hlavně v vnořených podmínkách.