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

Code Fรถrklaring:

  • Code rad 2: Deklarerar variabeln 'a' som datatypen 'NUMBER' och initierar den med vรคrdet '10'.
  • Code rad 4: Skriver ut meddelandet โ€Programmet startadeโ€.
  • Code rad 5: Kontrollerar villkoret om variabeln 'a' รคr stรถrre รคn '100'.
  • Code rad 6: Om 'a' รคr stรถrre รคn '100', sรฅ skrivs "a รคr stรถrre รคn 100" ut. Om 'a' รคr mindre รคn eller lika med 100, sรฅ misslyckas villkoret, sรฅ ovanstรฅende utskriftssats ignoreras.
  • Code rad 8: Skriver ut meddelandet โ€Program slutfรถrtโ€.

Code Produktion:

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

Code Fรถrklaring:

  • Code rad 2: Deklarera variabeln 'a' som 'CHAR' av storleken '1' datatyp och initialisera den med vรคrdet 'u'.
  • Code rad 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.
  • Code rad 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.

Code Produktion:

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

Code Fรถrklaring:

  • Code rad 2: Deklarerar variabeln 'a' som datatypen 'NUMBER' och initierar den med vรคrdet '11'.
  • Code rad 4: Skriver ut meddelandet โ€Programmet startadeโ€.
  • Code rad 5: Kontrollerar villkoret om modulen fรถr variabeln 'a' med '2' รคr 0.
  • Code rad 6: Om '0', sรฅ kommer "a รคr ett jรคmnt tal" att skrivas ut.
  • Code rad 7: Om modulvรคrdet inte รคr lika med '0' returnerar villkoret , sรฅ meddelandet "a รคr ett udda tal" kommer att skrivas ut.
  • Code rad 10: Skriver ut meddelandet โ€Program slutfรถrtโ€

Code Produktion:

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

Code Fรถrklaring:

  • Code rad 2: Deklarerar variabeln 'mark' som datatypen 'NUMBER' och initierar den med vรคrdet '55'.
  • Code rad 4: Skriver ut meddelandet โ€Programmet startadeโ€.
  • Code rad 5: Kontrollerar villkor 1, om 'mark' รคr stรถrre รคn eller lika med 70.
  • Code rad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70>mark>=40'.
  • Code rad 8: Villkor2 returnerar , dรคrav kommer meddelandet 'Betyg B' att skrivas ut.
  • Code rad 12: Skriver ut pรฅstรฅendet โ€Program slutfรถrtโ€.
  • I det hรคr fallet kommer condition3 'mark < 35' att hoppas รถver, eftersom styrenheten hittade ett tillstรฅnd som returnerar fรถre tillstรฅnd3.

Code Produktion:

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

Code Fรถrklaring:

  • Code rad 2: Deklarerar variabeln 'mark' som datatypen 'NUMBER' och initierar den med vรคrdet '25'.
  • Code rad 4: Skriver ut meddelandet โ€Programmet startadeโ€.
  • Code rad 5: Kontrollerar villkor 1, om 'mark' รคr stรถrre รคn eller lika med 70.
  • Code rad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70>mark>=40'.
  • Code rad 8: Eftersom villkor2 misslyckades, kontrolleras villkor3 '40>mark>=35'.
  • Code rad 11: Eftersom alla villkor misslyckas kommer kontrollsystemet nu att kontrollera om det finns ett ELSE-block och skriva ut meddelandet 'Inget betyg' frรฅn ELSE-blocket.
  • Code rad 14: Skriver ut pรฅstรฅendet โ€Program slutfรถrtโ€.

Code Produktion:

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

Code Fรถrklaring:

  • Code rad 2: Deklarerar variabeln 'a' som datatypen 'NUMBER' och initierar den med vรคrdet '10'.
  • Code rad 3: Deklarerar variabeln 'b' som datatypen 'NUMBER' och initierar den med vรคrdet '15'.
  • Code rad 4: Deklarerar variabeln 'c' som datatypen 'NUMBER' och initierar den med vรคrdet '20'.
  • Code rad 6: Skriver ut meddelandet โ€Program startatโ€ (rad 6).
  • Code rad 7: Kontrollerar villkor 1, om 'a' รคr stรถrre รคn 'b' (rad 7).
  • Code rad 10: Om 'a' รคr stรถrre รคn 'b', sรฅ kommer villkoret i 'nested-if 1' att kontrollera om 'a' รคr stรถrre รคn 'c' (rad 10).
  • Code rad 13: Om 'a' fortfarande รคr stรถrre, skrivs meddelandet 'A รคr stรถrst' ut (rad 11). Om villkor 2 misslyckas, skrivs 'C รคr stรถrst' ut (rad 13).
  • Code rad 18: Om villkor1 returnerar falskt, kommer villkoret i 'nested-if 2' att kontrollera om 'b' รคr stรถrre รคn 'c' (rad 18).
  • Code rad 21: Om 'b' รคr stรถrre รคn 'c' skrivs meddelandet 'B รคr โ€‹โ€‹stรถrst' ut (rad 19), annars om villkor 2 misslyckas skrivs 'C รคr stรถrst' ut (rad 21).
  • Code rad 24: Skriver ut pรฅstรฅendet โ€Program slutfรถrtโ€ (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: