Oracle PL/SQL IF THEN ANDRE Uttalande: ELSIF, NESTED-IF

Vad รคr beslutsfattande uttalanden?

Beslutsfattande uttalanden รคr de som kommer att bestรคmma flรถdeskontrollen av SQL uttalanden utifrรฅn fรถrutsรคttningarna. Det ger programmeraren en bรคttre kontroll รถver att fรถrhindra att en viss kod kรถrs (diagram 1) eller vรคlja en รถnskad kod baserat pรฅ villkoret (diagram 2). Nedan รคr den bildliga representationen av "Beslutsfattande uttalande".

Diagram fรถr beslutsfattande
Diagram fรถr beslutsfattande

Typer av beslutsfattande uttalanden:

Oracle tillhandahรฅller fรถljande typer av beslutsfattande uttalanden.

  • OM Dร…
  • OM Dร… ANNARS
  • OM-Dร…-ELSIF
  • NESTAD-OM
  • CASE
  • Sร–KT FALL

OM-Dร…-uttalande

IF-THEN-satsen anvรคnds huvudsakligen fรถr att exekvera en viss del av koder endast nรคr villkoret รคr uppfyllt.

Villkoret bรถr ge vika Boolean (Sant/falskt). Det รคr en grundlรคggande villkorssats som gรถr det mรถjligt fรถr ORACLE att exekvera/hoppa รถver en viss kodbit baserat pรฅ de fรถrdefinierade villkoren.

Syntax fรถr IF THEN-satser:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • I ovanstรฅende syntax kommer nyckelordet 'OM' att fรถljas av ett villkor som utvรคrderas till 'TRUE'/'FALSE'.
  • Kontrollen kommer att utfรถra endast om tillstรฅndet รฅterkommer .
  • Vid tillstรฅnd utvรคrderar till dรฅ kommer SQL att hoppa รถver , och den kommer att bรถrja exekvera koden bredvid 'END IF'-blocket.

Obs: Nรคr villkoret utvรคrderas till 'NULL', kommer SQL att behandla 'NULL' som 'FALSK'.

Exempelvis 1: I det hรคr exemplet kommer vi att skriva ut ett meddelande nรคr siffran รคr stรถrre รคn 100. Fรถr det kommer vi att kรถra fรถljande kod

Fรถr att skriva ut ett meddelande nรคr ett nummer har ett vรคrde รถver 100, kรถr vi fรถljande kod.

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

Kodfรถrklaring:

  • Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med vรคrdet '10'.
  • Kodrad 4: Skriver ut satsen "Program started".
  • Kodrad 5: Kontrollera villkoret, om variabel 'a' รคr stรถrre รคn '100'.
  • Kodrad 6: Om 'a' รคr stรถrre รคn '100' kommer โ€a รคr stรถrre รคn 100โ€ att skrivas ut. Om 'a' รคr mindre รคn eller lika med 100, misslyckas villkoret, sรฅ ovanstรฅende utskriftssats ignoreras.
  • Kodrad 8: Skriver ut meddelandet "Program completed".

Kodutgรฅng:

Program started.
Program completed.

Exempel 2: I det hรคr exemplet kommer vi att skriva ut ett meddelande om ett givet alfabet finns i engelska vokaler (A, E, I, O, U).

Fรถr att skriva ut ett meddelande nรคr det givna tecknet รคr Vokal, kรถr vi fรถljande kod.

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

Kodfรถrklaring:

  • Kodrad 2: Deklarera variabeln 'a' som 'CHAR' av storleken '1' datatyp och initialisera den med vรคrdet 'u'.
  • Kodrad 4: Kontrollera villkoret, om variabel 'a' finns i listan ('A', 'E', 'I', 'O', 'U').
  • Vรคrdet pรฅ 'a' har konverterats till versaler innan jรคmfรถrelsen fรถr att gรถra jรคmfรถrelsen รคr skiftlรคgesokรคnslig.
  • Kodrad 5: Om 'a' finns i listan, skrivs pรฅstรฅendet "Tecknet รคr i engelska vokaler". Om villkoret misslyckades, kommer detta program inte att ge nรฅgon utdata, eftersom vi utanfรถr IF-THEN-blocket inte har utfรคrdat nรฅgot utskriftsmeddelande.

Kodutgรฅng:

The character is in English Vowels

OM-Dร…-ANNARS uttalande

  • IF-THEN-ELSE-satsen anvรคnds huvudsakligen fรถr att vรคlja mellan tvรฅ alternativ baserat pรฅ villkoret.
  • Nedan รคr syntaxrepresentationen av IF-THEN-ELSE-satsen.

Syntax fรถr IF-THEN-ELSE-satser:

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;
  • I ovanstรฅende syntax kommer nyckelordet 'OM' att fรถljas av ett villkor som utvรคrderas till 'TRUE'/'FALSE'.
  • Kontrollen kommer att utfรถra endast om tillstรฅndet รฅterkommer .
  • Vid tillstรฅnd utvรคrderar till sedan kรถrs SQL .
  • I vilket fall som helst kommer ett av de tvรฅ รฅtgรคrdsblocken att exekveras.

Obs: Nรคrhelst villkoret utvรคrderas till 'NULL', kommer SQL att behandla 'NULL' som 'FALSK'.

Exempelvis 1: I det hรคr exemplet kommer vi att skriva ut meddelandet om det givna numret รคr udda eller jรคmnt.

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

Kodfรถrklaring:

  • Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med vรคrdet '11'.
  • Kodrad 4: Skriver ut satsen "Program started".
  • Kodrad 5: Kontrollera villkoret, om modulen fรถr variabel 'a' med '2' รคr 0.
  • Kodrad 6: Om '0' kommer "a รคr jรคmnt nummer" att skrivas ut.
  • Kodrad 7: Om modulvรคrdet inte รคr lika med '0' returneras villkoret , sรฅ meddelandet "a รคr udda nummer" kommer att skrivas ut.
  • Kodrad 10: Skriver ut pรฅstรฅendet "Program completed"

Kodutgรฅng:

Program started.
a is odd number
Program completed.

OM-Dร…-ELSIF-uttalande

  • IF-THEN-ELSIF-satsen anvรคnds frรคmst dรคr ett alternativ ska vรคljas frรฅn en uppsรคttning alternativ, dรคr varje alternativ har sina egna villkor som ska uppfyllas.
  • De fรถrsta villkoren som รฅterkommer kommer att kรถras och de รฅterstรฅende villkoren hoppas รถver.
  • IF-THEN-ELSIF-satsen kan innehรฅlla ett 'ELSE'-block. Detta 'ANSร…'-block kommer att exekveras om inget av villkoren รคr uppfyllt.

Anmรคrkningar: ELSE-blocket รคr valfritt i denna villkorssats. Om det inte finns nรฅgot ELSE-block och inget av villkoren รคr uppfyllda, kommer styrenheten att hoppa รถver alla รฅtgรคrdsblock och bรถrja exekvera den รฅterstรฅende delen av koden.

Syntax fรถr IF-THEN-ELSIF-satser:

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;
  • I ovanstรฅende syntax kommer kontrollen att kรถra endast om villkor1 รฅterkommer .
  • Om villkor1 inte รคr uppfyllt, kommer regulatorn att kontrollera efter villkor2.
  • Regulatorn kommer att lรคmna IF-statementet i fรถljande tvรฅ fall.
    • Nรคr styrenheten hittade nรฅgot tillstรฅnd som รฅterkommer . I detta fall kommer motsvarande action_block att exekveras och styrenheten kommer att lรคmna detta IF-stateblock och bรถrjar exekvera den รฅterstรฅende koden.
    • Nรคr inget av villkoren รคr uppfyllda kommer den dรฅvarande styrenheten att exekvera ELSE-blocket om det finns, och kommer sedan att lรคmna IF-satsen.

Obs: Nรคrhelst villkoret utvรคrderas till 'NULL', kommer SQL att behandla 'NULL' som 'FALSK'.

Exempel 1: Utan ELSE-block

I det hรคr exemplet kommer vi att skriva ut betyget baserat pรฅ de givna betygen utan annat villkor (markera >= 70 Betyg A, betyg >=40 och betyg <70 Betyg B, betyg >=35 och betyg <40 Betyg 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;
/

Kodfรถrklaring:

  • Kodrad 2: Deklarerar variabeln 'mark' som 'NUMBER' datatyp och initierar den med vรคrdet '55'.
  • Kodrad 4: Skriver ut satsen "Program started".
  • Kodrad 5: Kontrollera villkor1, om 'mark' รคr stรถrre eller lika med 70.
  • Kodrad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70>mark>=40'.
  • Kodrad 8: Condition2 returnerar , dรคrfรถr kommer meddelandet 'Grade B' att skrivas ut.
  • Kodrad 12: Skriver ut pรฅstรฅendet "Program completed".
  • I det hรคr fallet kommer condition3 'mark < 35' att hoppas รถver, eftersom styrenheten hittade ett tillstรฅnd som returnerar fรถre tillstรฅnd3.

Kodutgรฅng:

Program started.
Grade B
Program completed.

Exempelvis 2: Med ELSE-block

I det hรคr exemplet kommer vi att skriva ut betyget baserat pรฅ de givna betygen med annat villkor (markera >= 70 Betyg A, betyg >=40 och betyg <70 Betyg B, betyg >=35 och betyg <40 Betyg C, annat "Inget betyg").

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

Kodfรถrklaring:

  • Kodrad 2: Deklarerar variabeln 'mark' som 'NUMBER' datatyp och initierar den med vรคrdet '25'.
  • Kodrad 4: Skriver ut satsen "Program started".
  • Kodrad 5: Kontrollera villkor 1, om 'mark' รคr stรถrre eller lika med 70.
  • Kodrad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70>mark>=40'.
  • Kodrad 8: Eftersom villkor2 misslyckades, kontrolleras villkor3 '40>mark>=35'.
  • Kodrad 11: Eftersom alla villkor รคr misslyckade kommer kontrollen nu att kontrollera om det finns ett ELSE-block, och det kommer att skriva ut meddelandet 'No Grade' frรฅn ELSE-blocket.
  • Kodrad 14: Skriver ut pรฅstรฅendet "Program completed".

Kodutgรฅng:

Program started.
No Grade 
Program completed.

NESTED-IF-uttalande

  • NESTED-IF-satsen tillรฅter i princip programmerare att placera ett eller flera 'IF'-villkor i ett annat 'IF'-villkor. annat รคn vanliga uttalanden.
  • Varje "IF"-villkor bรถr ha en separat "END IF"-sats som markerar slutet pรฅ omfattningen av det specifika .
  • 'IF'-satsen kommer att betrakta den nรคrmaste 'END IF'-satsen som en slutpunkt fรถr det specifika tillstรฅndet.
  • Bildrepresentationen fรถr NESTED-IF visas nedanfรถr diagrammet.

NESTED-IF-uttalande

NESTED-IF-uttalande

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

Syntaxfรถrklaring:

  • I ovanstรฅende syntax innehรฅller den yttre IF ytterligare en IF-sats i sitt รฅtgรคrdsblock.
  • Villkoret1 รฅterkommer , dรฅ kommer kontrollen att kรถras och kontrollerar skick1.
  • Om condition2 ocksรฅ returnerar , dรฅ kommer ocksรฅ att verkstรคllas.
  • Vid tillstรฅnd2 utvรคrderas till dรฅ kommer SQL att hoppa รถver .

Hรคr kommer vi att se ett exempel pรฅ Nested If โ€“

Exempel pรฅ Nested- If-sats: Stรถrst av tre tal

I det hรคr exemplet kommer vi att skriva ut det stรถrsta av tre siffror genom att anvรคnda Nested-If-satsen. Numren kommer att tilldelas i deklarationsdelen, som du kan se i koden nedan, dvs Number= 10,15 och 20 och det maximala antalet kommer att hรคmtas med hjรคlp av kapslade-if-satser.

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

Kodfรถrklaring:

  • Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med vรคrdet '10'.
  • Kodrad 3: Deklarerar variabeln 'b' som datatyp 'NUMBER' och initierar den med vรคrdet '15'.
  • Kodrad 4: Deklarerar variabeln 'c' som datatyp 'NUMBER' och initierar den med vรคrdet '20'.
  • Kodrad 6: Skriver ut satsen "Program started" (rad 6).
  • Kodrad 7: Kontrollera villkor1, om 'a' รคr stรถrre รคn 'b' (rad 7).
  • Kodrad 10: Om 'a' รคr stรถrre รคn 'b' kommer villkoret i 'kapslade-om 1' att kontrollera om 'a' รคr stรถrre รคn 'c' (rad 10).
  • Kodrad 13: Om fortfarande 'a' รคr stรถrre, kommer meddelandet 'A รคr stรถrst' att skrivas ut (rad 11). Annars, om villkor 2 misslyckas, kommer 'C รคr stรถrst' att skrivas ut (rad 13).
  • Kodrad 18: Om villkor1 returnerar falskt, kommer villkoret i 'kapslade-om 2' att kontrollera om 'b' รคr stรถrre รคn 'c' (rad 18).
  • Kodrad 21: Om 'b' รคr stรถrre รคn 'c' kommer meddelandet 'B รคr โ€‹โ€‹stรถrst' att skrivas ut (rad 19), annars kommer 'C รคr stรถrst' att skrivas ut om villkor 2 misslyckas (rad 21).
  • Kodrad 24: Skriver ut meddelandet "Program completed" (rad 24).

Utmatning av kod:

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

Sammanfattning

I det hรคr kapitlet har vi lรคrt oss de olika beslutsfattande uttalandena och deras syntax och exempel. Tabellen nedan ger en sammanfattning av olika villkorliga uttalanden som vi har diskuterat.

TYP BESKRIVNING ANVร„NDANDE
OM Dร… Sรถker efter ett booleskt tillstรฅnd, om TRUE-koden i "THEN"-blocket kommer att exekveras. Att hoppa รถver,/kรถra en viss kod baserat pรฅ villkoret.
OM Dร… ANNARS Sรถker efter ett booleskt tillstรฅnd, om TRUE-kod i 'THEN'-blocket kommer att exekveras, om falsk kod i 'ANSER'-blocket exekveras. Mest lรคmpligt i 'THIS-ELLER-THAT'-tillstรฅndet.
OM-Dร…-ELSIF Sรถker efter ett booleskt tillstรฅnd i sekventiell ordning. Det fรถrsta blocket i sekvensen som returnerar TRUE-villkoret kommer att exekveras. Om inget av villkoren i sekvensen รคr TRUE, exekveras koden i 'ANSร…'-blocket. Anvรคnds fรถr att vรคlja mellan mer รคn tvรฅ alternativ oftast.
NESTAD-OM Tillรฅter en eller flera IF-THEN eller IF-THEN-ELSIF-sats inuti en annan IF-THEN eller IF-THEN-ELSIF-sats(er). Anvรคnds huvudsakligen i kapslade tillstรฅnd.

Sammanfatta detta inlรคgg med: