Oracle PL/SQL IF THEN ANDES Statement: ELSIF, NESTED-IF

Hvad er beslutningstagningserklรฆringer?

Beslutningstagningserklรฆringer er dem, der vil bestemme flow-kontrol af SQL udsagn baseret pรฅ forholdene. Det giver programmรธren en bedre kontrol med at forhindre en bestemt kode i at udfรธre (diagram 1) eller vรฆlge en รธnsket kode baseret pรฅ betingelsen (diagram 2). Nedenfor er den billedlige reprรฆsentation af "Beslutningstagningserklรฆringen".

Diagram for beslutningstagning
Diagram for beslutningstagning

Typer af beslutningstagningserklรฆringer:

Oracle giver fรธlgende typer beslutningserklรฆringer.

  • HVIS Sร…
  • HVIS-Sร…-ANDEN
  • HVIS-Sร…-ELSIF
  • NESTED-HVIS
  • CASE
  • Sร˜GTE SAG

HVIS-Sร…-erklรฆring

IF-THEN-sรฆtningen bruges hovedsageligt til kun at udfรธre en bestemt sektion af koder, nรฅr betingelsen er opfyldt.

Tilstanden burde give efter Boolesk (Sandt/Falsisk). Det er en grundlรฆggende betinget sรฆtning, som vil tillade ORACLE at udfรธre/springe over et bestemt stykke kode baseret pรฅ de foruddefinerede betingelser.

Syntaks for IF THEN-udsagn:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • I ovenstรฅende syntaks vil nรธgleordet 'HVIS' blive efterfulgt af en betingelse, der evalueres til 'SAND'/'FALSK'.
  • Kontrollen vil udfรธre kun hvis tilstanden vender tilbage .
  • I tilfรฆlde af tilstand vurderer til derefter vil SQL springe over , og den vil begynde at udfรธre koden ved siden af โ€‹โ€‹'END IF'-blokken.

Bemรฆrk: Nรฅr betingelsen evalueres til 'NULL', vil SQL behandle 'NULL' som 'FALSK'.

Eksempel 1: I dette eksempel vil vi udskrive en meddelelse, nรฅr tallet er stรธrre end 100. Til det vil vi udfรธre fรธlgende kode

For at udskrive en besked, nรฅr et tal har en vรฆrdi pรฅ mere end 100, udfรธrer vi fรธlgende kode.

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

Kodeforklaring:

  • Kodelinje 2: Erklรฆring af variablen 'a' som 'NUMBER' datatype og initialisering med vรฆrdien '10'.
  • Kodelinje 4: Udskrivning af erklรฆringen "Program started".
  • Kodelinje 5: Kontrol af betingelsen, om variabel 'a' er stรธrre end '100'.
  • Kodelinje 6: Hvis 'a' er stรธrre end '100', udskrives "a er stรธrre end 100". Hvis 'a' er mindre end eller lig med 100, mislykkes betingelsen, sรฅ ovenstรฅende udskrivningssรฆtning ignoreres.
  • Kodelinje 8: Udskrivning af erklรฆringen "Program gennemfรธrt".

Kodeoutput:

Program started.
Program completed.

Eksempel 2: I dette eksempel vil vi udskrive en besked, hvis et givet alfabet er til stede i engelske vokaler (A, E, I, O, U).

For at udskrive en besked, nรฅr det givne tegn er Vokal, udfรธrer vi fรธlgende kode.

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

Kodeforklaring:

  • Kodelinje 2: Erklรฆre variablen 'a' som 'CHAR' af stรธrrelsen '1' datatype og initialisere den med vรฆrdien 'u'.
  • Kodelinje 4: Kontrol af betingelsen, om variabel 'a' er til stede pรฅ listen ('A', 'E', 'I', 'O', 'U').
  • Vรฆrdien af โ€‹โ€‹'a' er blevet konverteret til store bogstaver, fรธr sammenligningen for at foretage sammenligningen er ufรธlsom.
  • Kodelinje 5: Hvis 'a' er til stede pรฅ listen, vil erklรฆringen "Tegnet er pรฅ engelske vokaler" blive udskrevet. Hvis betingelsen mislykkedes, vil dette program ikke give noget output, da vi uden for IF-THEN-blokken ikke har udstedt nogen udskrivningserklรฆring.

Kodeoutput:

The character is in English Vowels

HVIS-Sร…-ANDEN-erklรฆring

  • IF-THEN-ELSE-sรฆtningen bruges hovedsageligt til at vรฆlge mellem to alternativer baseret pรฅ betingelsen.
  • Nedenfor er syntaksreprรฆsentationen af โ€‹โ€‹IF-THEN-ELSE-sรฆtningen.

Syntaks for IF-THEN-ELSE-udsagn:

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 ovenstรฅende syntaks vil nรธgleordet 'HVIS' blive efterfulgt af en betingelse, der evalueres til 'SAND'/'FALSK'.
  • Kontrollen vil udfรธre kun hvis tilstanden vender tilbage .
  • I tilfรฆlde af tilstand vurderes til derefter vil SQL kรธre .
  • Under alle omstรฆndigheder vil en af โ€‹โ€‹de to handlingsblokke blive udfรธrt.

Bemรฆrk: Nรฅr betingelsen evalueres til 'NULL', vil SQL behandle 'NULL' som 'FALSK'.

Eksempel 1: I dette eksempel skal vi udskrive besked, om det givne tal er ulige eller lige.

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

Kodeforklaring:

  • Kodelinje 2: Erklรฆring af variablen 'a' som 'NUMBER' datatype og initialisering med vรฆrdien '11'.
  • Kodelinje 4: Udskrivning af erklรฆringen "Program started".
  • Kodelinje 5: Kontrol af betingelsen, om modulus for variabel 'a' med '2' er 0.
  • Kodelinje 6: Hvis '0', sรฅ vil "a er lige tal" blive udskrevet.
  • Kodelinje 7: Hvis modulvรฆrdien ikke er lig med '0', returnerer betingelsen , sรฅ beskeden "a er ulige tal" udskrives.
  • Kodelinje10: Udskrivning af erklรฆringen "Program gennemfรธrt"

Kodeoutput:

Program started.
a is odd number
Program completed.

HVIS-Sร…-ELSIF-erklรฆring

  • IF-THEN-ELSIF-sรฆtningen bruges hovedsageligt, hvor รฉt alternativ skal vรฆlges fra et sรฆt af alternativer, hvor hvert alternativ har sine egne betingelser, der skal opfyldes.
  • De fรธrste forhold, der vender tilbage vil blive udfรธrt, og de resterende betingelser vil blive sprunget over.
  • IF-THEN-ELSIF-sรฆtningen kan indeholde 'ELSE'-blok i den. Denne 'ELSE' blok vil blive udfรธrt, hvis ingen af โ€‹โ€‹betingelserne er opfyldt.

Bemรฆrk: ELSE-blok er valgfri i denne betingede sรฆtning. Hvis der ikke er nogen ELSE-blok, og ingen af โ€‹โ€‹betingelserne er opfyldt, vil controlleren springe hele handlingsblokken over og begynde at udfรธre den resterende del af koden.

Syntaks for IF-THEN-ELSIF-udsagn:

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 ovenstรฅende syntaks vil kontrollen udfรธre kun hvis betingelse1 vender tilbage .
  • Hvis betingelse1 ikke er opfyldt, vil controlleren tjekke for betingelse2.
  • Controlleren vil forlade IF-sรฆtningen i de fรธlgende to tilfรฆlde.
    • Nรฅr controlleren fandt en tilstand, der vender tilbage . I dette tilfรฆlde vil den tilsvarende action_block blive eksekveret, og controlleren vil forlade denne IF-sรฆtningsblok og begynde at udfรธre den resterende kode.
    • Nรฅr ingen af โ€‹โ€‹betingelserne er opfyldt, vil den davรฆrende controller udfรธre ELSE-blok, hvis den er til stede, og derefter forlade IF-sรฆtningen.

Bemรฆrk: Nรฅr betingelsen evalueres til 'NULL', vil SQL behandle 'NULL' som 'FALSK'.

Eksempel 1: Uden ELSE blok

I dette eksempel skal vi udskrive karakteren baseret pรฅ de givne karakterer uden anden betingelse (karakter >= 70 Karakter A, karakter >=40 og karakter<70 Karakter B, karakter >=35 og karakter<40 Karakter 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;
/

Kodeforklaring:

  • Kodelinje 2: Erklรฆring af variablen 'mark' som 'NUMBER' datatype og initialisering med vรฆrdien '55'.
  • Kodelinje 4: Udskrivning af erklรฆringen "Program started".
  • Kodelinje 5: Kontrol af betingelse1, om 'mรฆrke' er stรธrre eller lig med 70.
  • Kodelinje 7: Da betingelse1 mislykkedes, er betingelse2 '70>mark>=40' kontrolleret.
  • Kodelinje 8: Condition2 returnerer , derfor vil meddelelsen 'Grade B' blive udskrevet.
  • Kodelinje12: Udskrivning af erklรฆringen "Program gennemfรธrt".
  • I dette tilfรฆlde vil betingelse3 'mรฆrke < 35' blive sprunget over, da controlleren fandt en betingelse, som returnerer fรธr betingelse 3.

Kodeoutput:

Program started.
Grade B
Program completed.

Eksempel 2: Med ELSE blok

I dette eksempel skal vi udskrive karakteren baseret pรฅ de givne karakterer med anden betingelse (karakter >= 70 Karakter A, karakter >=40 og karakter<70 Karakter B, karakter >=35 og karakter<40 Karakter C, ellers 'Ingen karakter').

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

Kodeforklaring:

  • Kodelinje 2: Erklรฆring af variablen 'mark' som 'NUMBER' datatype og initialisering med vรฆrdien '25'.
  • Kodelinje 4: Udskrivning af erklรฆringen "Program started".
  • Kodelinje 5: Kontrol af betingelse 1, om 'mรฆrke' er stรธrre eller lig med 70.
  • Kodelinje 7: Da betingelse1 mislykkedes, er betingelse2 '70>mark>=40' kontrolleret.
  • Kodelinje 8: Da betingelse2 mislykkedes, er betingelse3 '40>mark>=35' kontrolleret.
  • Kodelinje 11: Da alle betingelser er mislykkede, vil kontrol nu kontrollere tilstedevรฆrelsen af โ€‹โ€‹ELSE-blok, og den vil udskrive meddelelsen 'No Grade' fra ELSE-blokken.
  • Kodelinje14: Udskrivning af erklรฆringen "Program gennemfรธrt".

Kodeoutput:

Program started.
No Grade 
Program completed.

NESTED-IF-erklรฆring

  • NESTED-IF-sรฆtningen tillader grundlรฆggende programmรธrer at placere en eller flere 'IF'-betingelser i en anden 'IF'-tilstand andet end normale udsagn.
  • Hver 'IF'-betingelse skal have en separat 'END IF'-erklรฆring, som markerer slutningen af โ€‹โ€‹omfanget af den pรฅgรฆldende .
  • 'IF'-erklรฆringen vil betragte den nรฆrmeste 'END IF'-erklรฆring som et slutpunkt for den pรฅgรฆldende tilstand.
  • Den billedlige reprรฆsentation for NESTED-IF er vist nedenfor diagrammet.

NESTED-IF-erklรฆring

NESTED-IF-erklรฆring

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

Syntaks forklaring:

  • I ovenstรฅende syntaks indeholder den ydre IF endnu en IF-sรฆtning i sin handlingsblok.
  • Tilstand1 vender tilbage , sรฅ udfรธres kontrol og tjekker tilstanden1.
  • Hvis betingelse2 ogsรฅ vender tilbage , derefter vil ogsรฅ blive udfรธrt.
  • I tilfรฆlde af tilstand2 vurderes til derefter vil SQL springe over .

Her skal vi se et eksempel pรฅ Nested If โ€“

Eksempel pรฅ indlejret-hvis-udsagn: Stรธrst af tre tal

I dette eksempel skal vi udskrive det stรธrste af tre tal ved at bruge Nested-If-sรฆtning. Numrene vil blive tildelt i deklareringsdelen, som du kan se i koden nedenfor, dvs. Number= 10,15 og 20, og det maksimale antal vil blive hentet ved hjรฆlp af nested-if-sรฆtninger.

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

Kodeforklaring:

  • Kodelinje 2: Erklรฆring af variablen 'a' som 'NUMBER' datatype og initialisering med vรฆrdien '10'.
  • Kodelinje 3: Erklรฆring af variablen 'b' som 'NUMBER' datatype og initialisering med vรฆrdien '15'.
  • Kodelinje 4: Erklรฆring af variablen 'c' som 'NUMBER' datatype og initialisering med vรฆrdien '20'.
  • Kodelinje 6: Udskrivning af erklรฆringen โ€œProgram startedโ€ (linje 6).
  • Kodelinje 7: Kontrol af betingelse1, om 'a' er stรธrre end 'b' (linje 7).
  • Kodelinje 10: Hvis 'a' er stรธrre end 'b', sรฅ vil betingelse i 'indlejret-hvis 1' kontrollere, om 'a' er stรธrre end 'c'(linje 10).
  • Kodelinje 13: Hvis stadig 'a' er stรธrre, udskrives meddelelsen 'A er stรธrst' (linje 11). Hvis betingelse 2 ellers mislykkes, vil 'C er stรธrst' blive udskrevet (linje 13).
  • Kodelinje 18: Hvis betingelse1 returnerer falsk, vil betingelse i 'indlejret-hvis 2' kontrollere, om 'b' er stรธrre end 'c'(linje 18).
  • Kodelinje 21: Hvis 'b' er stรธrre end 'c', vil meddelelsen 'B er stรธrst' blive udskrevet (linje 19), ellers hvis betingelse 2 fejler, sรฅ vil 'C er stรธrst' blive udskrevet (linje 21).
  • Kodelinje 24: Udskrivning af erklรฆringen "Program gennemfรธrt" (linje 24).

Output af kode:

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

Resumรฉ

I dette kapitel har vi lรฆrt de forskellige beslutningsudsagn og deres syntaks og eksempler. Nedenstรฅende tabel giver et resumรฉ af forskellige betingede udsagn, som vi har diskuteret.

TYPE BESKRIVELSE USAGE
HVIS Sร… Kontrollerer for en boolsk tilstand, hvis TRUE-koden i 'THEN'-blokken vil blive udfรธrt. At springe over/udfรธre en bestemt kode baseret pรฅ betingelsen.
HVIS-Sร…-ANDEN Kontrollerer for en boolsk tilstand, hvis TRUE kode i 'THEN'-blokken vil blive udfรธrt, hvis falsk kode i 'ELSE'-blokken udfรธres. Mest passende i tilstanden 'THIS-ELLER-THAT'.
HVIS-Sร…-ELSIF Kontrollerer for en boolesk tilstand i sekventiel rรฆkkefรธlge. Den fรธrste blok i sekvensen, som returnerer TRUE-tilstand, vil blive udfรธrt. Hvis ingen af โ€‹โ€‹betingelserne i sekvensen er TRUE, udfรธres koden i 'ELSE'-blokken. Bruges for det meste at vรฆlge mellem mere end to alternativer.
NESTED-HVIS Tillader en eller flere IF-THEN eller IF-THEN-ELSIF-sรฆtninger i en anden IF-THEN eller IF-THEN-ELSIF-sรฆtning(er). Anvendes hovedsageligt i indlejret tilstand.

Opsummer dette indlรฆg med: