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

Wat zijn besluitvormingsverklaringen?

Besluitvormingsverklaringen zijn degenen die beslissen over de stroomcontrole van SQL verklaringen op basis van de voorwaarden. Het geeft de programmeur een betere controle over het voorkomen dat een bepaalde code wordt uitgevoerd (diagram 1) of het kiezen van een gewenste code op basis van de voorwaarde (diagram 2). Hieronder vindt u de grafische weergave van de “Besluitverklaring”.

Besluitvormingsverklaringdiagram
Besluitvormingsverklaringdiagram

Soorten besluitvormingsverklaringen:

Oracle biedt de volgende typen besluitvormingsverklaringen.

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

ALS-DAN-verklaring

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

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

Syntaxis voor IF THEN-instructies:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • In de bovenstaande syntaxis wordt het trefwoord 'IF' gevolgd door een voorwaarde die resulteert in 'TRUE'/'FALSE'.
  • De besturing voert de alleen als de toestand terugkeert .
  • In het geval van een toestand evalueert dit tot Vervolgens slaat SQL het , en het zal beginnen met het uitvoeren van de code naast het blok 'END IF'.

Opmerking: Wanneer de voorwaarde wordt geëvalueerd als 'NULL', zal SQL 'NULL' behandelen als 'FALSE'.

Voorbeeld 1: In dit voorbeeld gaan we een bericht afdrukken wanneer het getal groter is dan 100. Hiervoor voeren we de volgende code uit

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

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

Code Verklaring:

  • Coderegel 2: De variabele 'a' declareren als gegevenstype 'NUMBER' 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', wordt 'a is groter dan 100' afgedrukt. Als 'a' kleiner is dan of gelijk is aan 100, mislukt de voorwaarde en wordt de bovenstaande afdrukinstructie 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 wanneer het opgegeven teken een klinker is, voeren we de volgende code uit.

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

Code Verklaring:

  • Coderegel 2: De variabele 'a' declareren als 'CHAR' met gegevenstype '1' en 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 vóór de vergelijking omgezet naar hoofdletters, zodat de vergelijking hoofdletterongevoelig is.
  • Coderegel 5: Als 'a' aanwezig is in de lijst, wordt de verklaring 'Het teken is in Engelse klinkers' afgedrukt. Als de voorwaarde mislukt, zal dit programma geen uitvoer geven, omdat we buiten het IF-THEN-blok geen afdrukinstructie hebben afgegeven.

Code-uitvoer:

The character is in English Vowels

ALS-DAN-ELSE-verklaring

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

Syntaxis voor IF-THEN-ELSE-instructies:

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;
  • In de bovenstaande syntaxis wordt het trefwoord 'IF' gevolgd door een voorwaarde die resulteert in 'TRUE'/'FALSE'.
  • De besturing voert de alleen als de toestand terugkeert .
  • In geval van een toestand evalueert tot Vervolgens wordt SQL uitgevoerd .
  • In ieder geval wordt één van de twee actieblokken uitgevoerd.

Opmerking: Wanneer de voorwaarde 'NULL' oplevert, zal SQL 'NULL' behandelen als 'FALSE'.

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

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

Code Verklaring:

  • Coderegel 2: De variabele 'a' declareren als gegevenstype 'NUMBER' en deze initialiseren met de 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 een even getal” afgedrukt.
  • Coderegel 7: Als de moduluswaarde niet gelijk is aan '0', keert de voorwaarde terug , zodat het bericht “a is oneven getal” wordt afgedrukt.
  • Coderegel10: Afdrukken van de verklaring “Programma voltooid”

Code-uitvoer:

Program started.
a is odd number
Program completed.

IF-THEN-ELSIF-verklaring

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

Note: 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-instructies:

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;
  • In de bovenstaande syntaxis voert het besturingselement de opdracht uit alleen als voorwaarde1 terugkeert .
  • Als niet aan voorwaarde 1 wordt voldaan, controleert de controller op voorwaarde 2.
  • De controller verlaat de IF-instructie in de volgende twee gevallen.
    • Wanneer de controller een voorwaarde heeft gevonden die terugkeert . In dit geval wordt het corresponderende action_block uitgevoerd en verlaat de controller dit IF-statementblok en begint met het uitvoeren van de resterende code.
    • Als aan geen van de voorwaarden is voldaan, zal de then-controller het ELSE-blok uitvoeren, indien aanwezig, en vervolgens de IF-instructie verlaten.

Opmerking: Wanneer de voorwaarde 'NULL' oplevert, zal SQL 'NULL' behandelen als 'FALSE'.

Voorbeeld 1: Zonder ELSE-blok

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

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

Code Verklaring:

  • Coderegel 2: De variabele 'mark' declareren als gegevenstype 'NUMBER' en deze initialiseren met de 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: Omdat voorwaarde1 mislukt is, wordt voorwaarde2 '70>mark>=40′ gecontroleerd.
  • Coderegel 8: De voorwaarde2 retourneert , vandaar dat de melding 'Grade B' wordt afgedrukt.
  • Coderegel12: Afdrukken van de verklaring “Programma voltooid”.
  • In dit geval wordt voorwaarde3 'mark < 35' overgeslagen, omdat de controller één voorwaarde heeft gevonden die terugkeert vóór voorwaarde3.

Code-uitvoer:

Program started.
Grade B
Program completed.

Voorbeeld 2: Met ELSE-blok

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

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

Code Verklaring:

  • Coderegel 2: De variabele 'mark' declareren als gegevenstype 'NUMBER' 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: Omdat voorwaarde1 mislukt is, wordt voorwaarde2 '70>mark>=40′ gecontroleerd.
  • Coderegel 8: Omdat voorwaarde2 mislukt is, wordt voorwaarde3 '40>mark>=35′ gecontroleerd.
  • Coderegel 11: Omdat aan alle voorwaarden is voldaan, controleert de besturing nu op de aanwezigheid van een ELSE-blok en wordt het bericht 'Geen cijfer' van het ELSE-blok afgedrukt.
  • Coderegel14: Afdrukken van de verklaring “Programma voltooid”.

Code-uitvoer:

Program started.
No Grade 
Program completed.

NESTED-IF-verklaring

  • Met de NESTED-IF-instructie kunnen programmeurs in principe een of meer 'ALS'-voorwaarden in een andere 'IF'-voorwaarde plaatsen. andere dan normale uitspraken.
  • Elke 'IF'-voorwaarde moet een afzonderlijke'END IF'-instructie hebben die het einde van de reikwijdte van die specifieke voorwaarde aangeeft .
  • De 'IF'-instructie beschouwt de dichtstbijzijnde 'END IF'-instructie als eindpunt voor die specifieke voorwaarde.
  • De grafische weergave voor NESTED-IF wordt hieronder weergegeven.

NESTED-IF-verklaring

NESTED-IF-verklaring

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

Syntaxis uitleg:

  • In de bovenstaande syntaxis bevat de buitenste IF nog een IF-instructie in zijn actieblok.
  • De voorwaarde1 keert terug , dan wordt de controle uitgevoerd en controleert de toestand1.
  • Als voorwaarde2 ook terugkeert , Dan zal eveneens worden uitgevoerd.
  • In het geval van voorwaarde2 evalueert dit tot Vervolgens slaat SQL het .

Hier gaan we een voorbeeld zien van Geneste If –

Voorbeeld van geneste-If-instructie: Grootste van drie getallen

In dit voorbeeld gaan we het grootste van de drie getallen printen met behulp van de Nested-If-statement. De getallen worden toegewezen in het declare-gedeelte, zoals u kunt zien in de onderstaande code, d.w.z. Number= 10,15 en 20 en het maximum aantal wordt opgehaald met behulp van nested-if-statements.

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

Code Verklaring:

  • Coderegel 2: De variabele 'a' declareren als gegevenstype 'NUMBER' en deze initialiseren met de waarde '10'.
  • Coderegel 3: De variabele 'b' declareren als gegevenstype 'NUMBER' en deze initialiseren met de waarde '15'.
  • Coderegel 4: De variabele 'c' declareren als gegevenstype 'NUMBER' en deze initialiseren met de waarde '20'.
  • Coderegel 6: Afdrukken van de verklaring “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', controleert de voorwaarde in 'nested-if 1' of 'a' groter is dan 'c' (regel 10).
  • Coderegel 13: Als 'a' nog steeds groter is, wordt het bericht 'A is het grootst' afgedrukt (regel 11). Als voorwaarde 2 anders mislukt, wordt 'C is het grootst' afgedrukt (regel 13).
  • Coderegel 18: Als voorwaarde1 false retourneert, controleert voorwaarde in 'geneste als 2' of 'b' groter is dan 'c' (regel 18).
  • Coderegel 21: Als 'b' groter is dan 'c', wordt het bericht 'B is het grootst' afgedrukt (regel 19), anders wordt 'C is het grootst' afgedrukt als voorwaarde 2 mislukt (regel 21).
  • Coderegel 24: Afdrukken van de verklaring “Programma voltooid” (regel 24).

Uitvoer van code:

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

Samenvatting

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

TYPE PRODUCTBESCHRIJVING GEBRUIK
ALS DAN Controleert op een Booleaanse voorwaarde, als de WARE code in het 'THEN'-blok wordt uitgevoerd. Om een ​​bepaalde code over te slaan/uit te voeren op basis van de voorwaarde.
ALS DAN ANDERS Controleert op een Booleaanse voorwaarde, of WARE code in 'THEN'-blok wordt uitgevoerd, of valse code in 'ELSE'-blok wordt uitgevoerd. Meest geschikt in 'DIT-OF-DAT'-toestand.
ALS-DAN-ELSIF Controleert op een Booleaanse voorwaarde in opeenvolgende volgorde. 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 werd er uit meer dan twee alternatieven gekozen.
NESTED-IF Staat een of meer IF-THEN- of IF-THEN-ELSIF-instructies toe binnen een andere IF-THEN- of IF-THEN-ELSIF-instructie(s). Hoofdzakelijk gebruikt in geneste situatie.