Oracle PL / SQL IF THEN ELSE-instructie: ELSIF, NESTED-IF

Inhoudsopgave:

Anonim

Wat zijn beslissingsverklaringen?

Beslissingsverklaringen zijn degenen die beslissen over de stroombesturing van SQL-instructies op basis van de voorwaarden. Het geeft de programmeur een betere controle om te voorkomen dat een bepaalde code wordt uitgevoerd (diagram 1) of om een ​​gewenste code te kiezen op basis van de conditie (diagram 2). Hieronder ziet u de grafische weergave van de "besluitvormingsverklaring".

Besluitvormingsverklaring diagram

Soorten besluitvormingsverklaringen:

Oracle biedt de volgende soorten besluitvormingsverklaringen.

  • ALS DAN
  • ALS DAN ANDERS
  • ALS-DAN-ELSIF
  • NESTED-IF
  • GEVAL
  • GEZOCHT CASE

In deze tutorial leer je-

  • Inleiding tot uitspraken over besluitvorming
  • IF-THEN-verklaring
  • IF-THEN-ELSE-verklaring
  • IF-THEN-ELSIF-verklaring
  • NESTED-IF-instructie

IF-THEN-verklaring

De IF-THEN-instructie wordt voornamelijk gebruikt om een ​​bepaald gedeelte van codes alleen uit te voeren als aan de voorwaarde is voldaan.

De voorwaarde zou Boolean (True / False) moeten opleveren. Het is een eenvoudige voorwaardelijke instructie waarmee de ORACLE een bepaald stuk code kan uitvoeren / overslaan op basis van de vooraf gedefinieerde voorwaarden.

Syntaxis voor IF THEN-verklaringen:

IF THEN-executed only if the condition returns TRUEEND if;
  • In de bovenstaande syntaxis wordt het trefwoord 'ALS' gevolgd door een voorwaarde die resulteert in 'TRUE' / 'FALSE'.
  • Het besturingselement voert het alleen uit als de conditie retourneert.
  • In het geval dat de voorwaarde resulteert in , zal SQL het overslaan en zal het beginnen met het uitvoeren van de code naast het 'END IF'-blok.

Opmerking: elke voorwaarde die wordt geëvalueerd als 'NULL', behandelt SQL 'NULL' als 'FALSE'.

Voorbeeld 1 : In dit voorbeeld gaan we een bericht afdrukken wanneer het nummer groter is dan 100. Daarvoor zullen we de volgende code uitvoeren

Om een ​​bericht af te drukken wanneer een getal een waarde heeft van meer dan 100, voeren we de volgende code uit.

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

Code Verklaring:

  • Coderegel 2: de variabele 'a' declareren als 'NUMBER' datatype en deze initialiseren met de waarde '10'.
  • Coderegel 4: Afdrukken van de verklaring "Programma gestart".
  • Coderegel 5: Controle van de voorwaarde, of variabele 'a' groter is dan '100'.
  • Coderegel 6: Als 'a' groter is dan '100', dan wordt "a is groter dan 100" afgedrukt. Als 'a' kleiner is dan of gelijk is aan 100, dan mislukt de voorwaarde, dus de bovenstaande afdrukinstructie wordt genegeerd.
  • Coderegel 8: Afdrukken van de verklaring "Programma voltooid".

Code-uitvoer:

Program started.Program completed. 

Voorbeeld 2: In dit voorbeeld gaan we een bericht afdrukken als een bepaald alfabet aanwezig is in Engelse klinkers (A, E, I, O, U).

Om een ​​bericht af te drukken als het gegeven karakter Klinker is, voeren we de volgende code uit.

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

Code Verklaring:

  • Coderegel 2: de variabele 'a' declareren als 'CHAR' van het gegevenstype grootte '1' en deze initialiseren met de waarde 'u'.
  • Coderegel 4: Controle van de voorwaarde, of variabele 'a' aanwezig is in de lijst ('A', 'E', 'I', 'O', 'U').
  • De waarde van 'a' is geconverteerd naar hoofdletters voordat deze wordt vergeleken om de vergelijking niet hoofdlettergevoelig te maken.
  • Coderegel 5: Als 'a' in de lijst voorkomt, wordt de verklaring "The character is in English Vowels" afgedrukt. Als de voorwaarde is mislukt, geeft dit programma geen uitvoer, omdat we buiten het IF-THEN-blok geen afdrukinstructie hebben afgegeven.

Code-uitvoer:

The character is in English Vowels

IF-THEN-ELSE-verklaring

  • De IF-THEN-ELSE-instructie wordt voornamelijk gebruikt om tussen twee alternatieven te kiezen op basis van de conditie.
  • Hieronder ziet u de syntaxisweergave van de IF-THEN-ELSE-instructie.

Syntaxis voor IF-THEN-ELSE-verklaringen:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • In de bovenstaande syntaxis wordt het trefwoord 'ALS' gevolgd door een voorwaarde die resulteert in 'TRUE' / 'FALSE'.
  • Het besturingselement voert de alleen uit als de conditie retourneert.
  • In het geval dat de voorwaarde resulteert in , zal SQL uitvoeren.
  • In ieder geval wordt een van de twee actieblokken uitgevoerd.

Opmerking: elke keer dat de voorwaarde resulteert in 'NULL', behandelt SQL 'NULL' als 'FALSE'.

Voorbeeld 1 : In dit voorbeeld gaan we een bericht afdrukken of het opgegeven getal oneven of even is.

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

Code Verklaring:

  • Coderegel 2: de variabele 'a' declareren als 'NUMBER' datatype en deze initialiseren met waarde '11'.
  • Coderegel 4: Afdrukken van de verklaring "Programma gestart".
  • Coderegel 5: Controle van de voorwaarde, of de modulus van variabele 'a' bij '2' 0 is.
  • Coderegel 6: Indien '0', dan wordt "a is even getal" afgedrukt.
  • Coderegel 7: Als de moduluswaarde niet gelijk is aan '0', dan retourneert de voorwaarde , dus het bericht "a is oneven getal" wordt afgedrukt.
  • Code line10: Afdrukken van de verklaring "Programma voltooid"

Code-uitvoer:

Program started.a is odd numberProgram completed. 

IF-THEN-ELSIF-verklaring

  • De IF-THEN-ELSIF-verklaring wordt voornamelijk gebruikt waar één alternatief moet worden gekozen uit een reeks alternatieven, waarbij elk alternatief zijn eigen voorwaarden heeft waaraan moet worden voldaan.
  • De eerste voorwaarden die retourneren, worden uitgevoerd en de overige voorwaarden worden overgeslagen.
  • Het IF-THEN-ELSIF-statement kan het 'ELSE'-blok erin bevatten. Dit 'ELSE'-blok wordt uitgevoerd als aan geen van de voorwaarden is voldaan.

Opmerking : ELSE-blok is optioneel in deze voorwaardelijke instructie. Als er geen ELSE-blok is en aan geen van de voorwaarden is voldaan, slaat de controller het hele actieblok over en begint het resterende deel van de code uit te voeren.

Syntaxis voor IF-THEN-ELSIF-verklaringen:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • In de bovenstaande syntaxis voert het besturingselement de alleen uit als de condition1 retourneert.
  • Als niet aan voorwaarde1 is voldaan, controleert de controller op voorwaarde2.
  • De controller verlaat het IF-statement in de volgende twee gevallen.
    • Wanneer de controller een conditie heeft gevonden die retourneert. In dit geval zal het corresponderende action_block worden uitgevoerd en zal de controller dit IF-statement blok verlaten en zal beginnen met het uitvoeren van de resterende code.
    • Als aan geen van de voorwaarden is voldaan, zal de controller het ELSE-blok uitvoeren, indien aanwezig, en vervolgens het IF-statement verlaten.

Opmerking: elke keer dat de voorwaarde resulteert in 'NULL', behandelt SQL 'NULL' als 'FALSE'.

Voorbeeld 1: zonder ELSE-blok

In dit voorbeeld gaan we het cijfer afdrukken op basis van de gegeven cijfers zonder andere voorwaarde (cijfer> = 70 cijfer A, cijfer> = 40 en cijfer <70 cijfer B, cijfer> = 35 en cijfer <40 cijfer 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;/

Code Verklaring:

  • Coderegel 2: de variabele 'mark' declareren als 'NUMBER' datatype en deze initialiseren met waarde '55'.
  • Coderegel 4: Afdrukken van de verklaring "Programma gestart".
  • Coderegel 5: Controle van voorwaarde1, of 'mark' groter of gelijk is aan 70.
  • Coderegel 7: Aangezien voorwaarde1 mislukt, wordt voorwaarde2 '70> mark> = 40 'aangevinkt.
  • Coderegel 8: Condtition2 retourneert , vandaar dat het bericht 'Grade B' wordt afgedrukt.
  • Code line12: Afdrukken van het statement "Programma voltooid".
  • In dit geval wordt de voorwaarde3 'markering <35' overgeslagen, omdat de controller één voorwaarde heeft gevonden die retourneert vóór voorwaarde3.

Code-uitvoer:

Program started.Grade BProgram completed.

Voorbeeld 2 : Met ELSE-blok

In dit voorbeeld gaan we het cijfer afdrukken op basis van de gegeven cijfers met een andere voorwaarde (cijfer> = 70 cijfer A, cijfer> = 40 en cijfer <70 cijfer B, cijfer> = 35 en cijfer <40 cijfer C, anders 'Geen cijfer').

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

Code Verklaring:

  • Coderegel 2: de variabele 'mark' declareren als 'NUMBER' datatype en deze initialiseren met de waarde '25'.
  • Coderegel 4: Afdrukken van de verklaring "Programma gestart".
  • Coderegel 5: Controle van voorwaarde 1, of 'mark' groter of gelijk is aan 70.
  • Coderegel 7: Aangezien voorwaarde1 mislukt, wordt voorwaarde2 '70> mark> = 40 'aangevinkt.
  • Coderegel 8: Aangezien voorwaarde2 mislukt, wordt voorwaarde3 '40> mark> = 35 'gecontroleerd.
  • Coderegel 11: Aangezien aan alle voorwaarden is gefaald, controleert de besturing nu op de aanwezigheid van het ELSE-blok en wordt het bericht 'Geen cijfer' uit het ELSE-blok afgedrukt.
  • Code line14: Afdrukken van het statement "Programma voltooid".

Code-uitvoer:

Program started.No GradeProgram completed.

NESTED-IF-instructie

  • De NESTED-IF-instructie is in principe toegestaan ​​dat programmeurs een of meer 'ALS'-voorwaarde binnen een andere' ALS'-voorwaarde plaatsen, anders dan normale opdrachten.
  • Elke 'ALS'-voorwaarde moet een afzonderlijke' END IF'-instructie hebben die het einde van het bereik van dat specifieke aangeeft.
  • De 'IF'-instructie beschouwt de dichtstbijzijnde' END IF'-instructie als een eindpunt voor die specifieke voorwaarde.
  • De picturale weergave voor NESTED-IF wordt hieronder weergegeven.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Syntaxis Uitleg:
  • In de bovenstaande syntaxis bevat de buitenste IF nog een IF-instructie in zijn actieblok.
  • De voorwaarde1 retourneert , dan zal de controle uitvoeren en de voorwaarde2 controleren.
  • Als voorwaarde2 ook retourneert, wordt ook uitgevoerd.
  • In het geval dat condition2 resulteert in , zal SQL het overslaan.

Hier gaan we een voorbeeld zien van geneste als -

Voorbeeld van geneste-if-instructie: hoogste van drie cijfers

In dit voorbeeld gaan we de grootste van drie getallen afdrukken met behulp van de instructie Nested-If. De nummers worden toegewezen in het declaratiegedeelte, zoals u kunt zien in de onderstaande code, dwz nummer = 10,15 en 20 en het maximale aantal wordt opgehaald met behulp van geneste-if-instructies.

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

Code Verklaring:

  • Coderegel 2: de variabele 'a' declareren als 'NUMBER' datatype en deze initialiseren met de waarde '10'.
  • Coderegel 3: de variabele 'b' declareren als 'NUMBER' datatype en deze initialiseren met de waarde '15'.
  • Coderegel 4: de variabele 'c' declareren als 'NUMBER' datatype en deze initialiseren met de waarde '20'.
  • Coderegel 6: Afdrukken van het statement "Programma gestart" (regel 6).
  • Coderegel 7: Controle van voorwaarde1, of 'a' groter is dan 'b' (regel 7).
  • Coderegel 10: Als 'a' groter is dan 'b, dan zal voorwaarde in' geneste-als 1 'controleren of' a 'groter is dan' c '(regel 10).
  • Coderegel 13: Als nog steeds 'a' groter is, wordt bericht 'A is het grootst' afgedrukt (regel 11). Anders als voorwaarde2 mislukt, wordt 'C is het grootst' afgedrukt (regel 13).
  • Coderegel 18: In het geval dat conditie1 false retourneert, dan zal conditie in 'genest-als 2' controleren of 'b' groter is dan 'c' (regel 18).
  • Coderegel 21: Als 'b' groter is dan 'c', wordt bericht 'B is het grootst' afgedrukt (regel 19), anders als voorwaarde2 mislukt, wordt 'C is het grootst' afgedrukt (regel 21).
  • Coderegel 24: Afdrukken van het statement "Programma voltooid" (regel 24).

Uitvoer van code:

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

Overzicht

In dit hoofdstuk hebben we de verschillende besluitvormingsverklaringen en hun syntaxis en voorbeelden geleerd. Onderstaande tabel geeft de samenvatting van verschillende voorwaardelijke uitspraken die we hebben besproken.

TYPE

OMSCHRIJVING

GEBRUIK

ALS DAN

Controleert op een Booleaanse voorwaarde, of TRUE-code in het 'THEN'-blok wordt uitgevoerd.

Om een ​​bepaalde code over te slaan / uit te voeren op basis van de conditie.

ALS DAN ANDERS

Controleert op een Booleaanse voorwaarde, of TRUE-code in 'THEN'-blok wordt uitgevoerd, als valse code in' ELSE'-blok wordt uitgevoerd.

Meest geschikt in 'THIS-OF-THAT'-toestand.

ALS-DAN-ELSIF

Controleert in opeenvolgende volgorde op een Booleaanse voorwaarde. Het eerste blok in de reeks dat de voorwaarde TRUE retourneert, wordt uitgevoerd. Als geen van de voorwaarden in de reeks WAAR is, wordt de code in het 'ELSE'-blok uitgevoerd.

Meestal gebruikt om uit meer dan twee alternatieven te kiezen.

NESTED-IF

Staat een of meer IF-THEN- of IF-THEN-ELSIF-instructies toe in een andere IF-THEN- of IF-THEN-ELSIF-instructie (s).

Hoofdzakelijk gebruikt in geneste toestandsituatie.