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

Hva er beslutningsuttalelser?

Beslutningstakende uttalelser er de som skal bestemme flytkontrollen av SQL uttalelser basert pรฅ forholdene. Det gir programmereren en bedre kontroll med รฅ forhindre at en bestemt kode kjรธres (diagram 1) eller velge en รธnsket kode basert pรฅ betingelsen (diagram 2). Nedenfor er den billedmessige representasjonen av "Beslutningstakingserklรฆringen".

Diagram for beslutningstaking
Diagram for beslutningstaking

Typer beslutningstakingserklรฆringer:

Oracle gir fรธlgende typer beslutningsuttalelser.

  • HVIS DA
  • HVIS-Sร…-ANNET
  • HVIS-Sร…-ELSIF
  • NESTED-HVIS
  • CASE
  • Sร˜KT SAK

HVIS-Sร…-erklรฆring

IF-THEN-setningen brukes hovedsakelig til รฅ utfรธre en bestemt del av koder bare nรฅr betingelsen er oppfylt.

Tilstanden bรธr gi etter boolean (Sant/Usant). Det er en grunnleggende betinget setning som vil tillate ORACLE รฅ kjรธre/hoppe over et bestemt kodestykke basert pรฅ de forhรฅndsdefinerte betingelsene.

Syntaks for IF THEN-utsagn:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • I syntaksen ovenfor vil nรธkkelordet 'IF' bli fulgt av en betingelse som evalueres til 'TRUE'/'FALSE'.
  • Kontrollen vil utfรธre bare hvis tilstanden kommer tilbake .
  • Ved tilstand vurderer til deretter vil SQL hoppe over , og den vil begynne รฅ kjรธre koden ved siden av 'END IF'-blokken.

OBS: Nรฅr tilstanden evalueres til 'NULL', vil SQL behandle 'NULL' som 'USANN'.

Eksempel 1: I dette eksemplet skal vi skrive ut en melding nรฅr tallet er stรธrre enn 100. For det vil vi utfรธre fรธlgende kode

For รฅ skrive ut en melding nรฅr et tall har en verdi over 100, kjรธ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: Deklarerer variabelen 'a' som 'NUMBER' datatype og initialiserer den med verdien '10'.
  • Kodelinje 4: Skriver ut setningen "Program startet".
  • Kodelinje 5: Kontrollerer betingelsen, om variabel 'a' er stรธrre enn '100.'
  • Kodelinje 6: Hvis 'a' er stรธrre enn '100', vil "a er stรธrre enn 100" bli skrevet ut. Hvis 'a' er mindre enn eller lik 100, mislykkes betingelsen, sรฅ utskriftssetningen ovenfor ignoreres.
  • Kodelinje 8: Skriver ut erklรฆringen "Program fullfรธrt".

Kodeutgang:

Program started.
Program completed.

Eksempel 2: I dette eksemplet skal vi skrive ut en melding hvis et gitt alfabet er til stede i engelske vokaler (A, E, I, O, U).

For รฅ skrive ut en melding nรฅr det gitte tegnet er Vokal, kjรธ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: Deklarerer variabelen 'a' som 'CHAR' av stรธrrelsen '1' datatype og initialiserer den med verdien 'u'.
  • Kodelinje 4: Kontroller betingelsen, om variabel 'a' er til stede i listen ('A','E','I','O','U').
  • Verdien av 'a' er konvertert til store bokstaver fรธr sammenligningen for รฅ gjรธre sammenligningen skiller mellom store og smรฅ bokstaver.
  • Kodelinje 5: Hvis 'a' er til stede i listen, vil setningen "Tegnet er i engelske vokaler" bli skrevet ut. Hvis tilstanden mislyktes, vil dette programmet ikke gi noe utdata, da vi utenfor IF-THEN-blokken ikke har utstedt noen utskriftserklรฆring.

Kodeutgang:

The character is in English Vowels

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

  • IF-THEN-ELSE-setningen brukes hovedsakelig til รฅ velge mellom to alternativer basert pรฅ betingelsen.
  • Nedenfor er syntaksrepresentasjonen av IF-THEN-ELSE-setningen.

Syntaks for IF-THEN-ELSE-setninger:

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 syntaksen ovenfor vil nรธkkelordet 'IF' bli fulgt av en betingelse som evalueres til 'TRUE'/'FALSE'.
  • Kontrollen vil utfรธre bare hvis tilstanden kommer tilbake .
  • Ved tilstand vurderer til deretter vil SQL kjรธres .
  • I alle fall vil en av de to handlingsblokkene bli utfรธrt.

OBS: Nรฅr betingelsen evalueres til 'NULL', vil SQL behandle 'NULL' som 'USANN'.

Eksempel 1: I dette eksemplet skal vi skrive ut melding om det gitte tallet er oddetall eller partall.

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: Deklarerer variabelen 'a' som 'NUMBER' datatype og initialiserer den med verdien '11'.
  • Kodelinje 4: Skriver ut setningen "Program startet".
  • Kodelinje 5: Kontrollerer betingelsen om modulen til variabel 'a' med '2' er 0.
  • Kodelinje 6: Hvis '0', vil "a er partall" skrives ut.
  • Kodelinje 7: Hvis modulverdien ikke er lik '0', returnerer betingelsen , sรฅ meldingen "a er oddetall" vil bli skrevet ut.
  • Kodelinje 10: Skriver ut setningen "Program fullfรธrt"

Kodeutgang:

Program started.
a is odd number
Program completed.

IF-THEN-ELSIF-erklรฆring

  • IF-THEN-ELSIF-uttalelsen brukes hovedsakelig der ett alternativ skal velges fra et sett med alternativer, hvor hvert alternativ har sine egne betingelser som skal tilfredsstilles.
  • De fรธrste forholdene som kommer tilbake vil bli utfรธrt, og de resterende betingelsene vil bli hoppet over.
  • IF-THEN-ELSIF-setningen kan inneholde 'ELSE'-blokken i den. Denne 'ELSE'-blokken vil bli utfรธrt hvis ingen av betingelsene er oppfylt.

Merknader: ELSE-blokken er valgfri i denne betingede setningen. Hvis det ikke er noen ELSE-blokk, og ingen av betingelsene er oppfylt, vil kontrolleren hoppe over hele handlingsblokken og begynne รฅ utfรธre den gjenvรฆrende delen av koden.

Syntaks for IF-THEN-ELSIF-utsagn:

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 syntaksen ovenfor vil kontrollen utfรธre bare hvis betingelse1 kommer tilbake .
  • Hvis betingelse1 ikke er oppfylt, vil kontrolleren se etter tilstand2.
  • Kontrollรธren vil gรฅ ut av IF-erklรฆringen i fรธlgende to tilfeller.
    • Nรฅr kontrolleren fant en tilstand som returnerer . I dette tilfellet vil den tilsvarende action_block bli utfรธrt og kontrolleren vil avslutte denne IF-setningsblokken og vil begynne รฅ utfรธre den gjenvรฆrende koden.
    • Nรฅr ingen av betingelsene er oppfylt, vil den davรฆrende kontrolleren utfรธre ELSE-blokken hvis den er tilstede, og deretter gรฅ ut av IF-setningen.

OBS: Nรฅr betingelsen evalueres til 'NULL', vil SQL behandle 'NULL' som 'USANN'.

Eksempel 1: Uten ELSE-blokk

I dette eksemplet skal vi skrive ut karakteren basert pรฅ de gitte karakterene uten andre betingelser (merk >= 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รฆrer variabelen 'mark' som 'NUMBER' datatype og initialiserer den med verdien '55'.
  • Kodelinje 4: Skriver ut setningen "Program startet".
  • Kodelinje 5: Kontroller betingelse1, om 'merke' er stรธrre eller lik 70.
  • Kodelinje 7: Siden betingelse1 mislyktes, blir betingelse2 '70>mark>=40' sjekket.
  • Kodelinje 8: Betingelsen2 returnerer , derfor vil meldingen 'Klasse B' bli skrevet ut.
  • Kodelinje12: Skriver ut setningen "Program fullfรธrt".
  • I dette tilfellet vil betingelse3 'merke < 35' bli hoppet over, da kontrolleren fant en tilstand som returnerer fรธr tilstand 3.

Kodeutgang:

Program started.
Grade B
Program completed.

Eksempel 2: Med ELSE-blokk

I dette eksemplet skal vi skrive ut karakteren basert pรฅ de gitte karakterene med else condition (merke >= 70 karakter A, karakter >=40 og karakter <70 karakter B, karakter >=35 og karakter<40 karakter C, annet '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รฆrer variabelen 'mark' som 'NUMBER' datatype og initialiserer den med verdien '25'.
  • Kodelinje 4: Skriver ut setningen "Program startet".
  • Kodelinje 5: Kontrollerer betingelse 1, om 'merke' er stรธrre eller lik 70.
  • Kodelinje 7: Siden betingelse1 mislyktes, blir betingelse2 '70>mark>=40' sjekket.
  • Kodelinje 8: Siden betingelse2 mislyktes, blir betingelse3 '40>mark>=35' sjekket.
  • Kodelinje 11: Siden alle betingelsene er mislyktes, vil kontrollen nรฅ se etter tilstedevรฆrelsen av ELSE-blokken, og den vil skrive ut meldingen 'No Grade' fra ELSE-blokken.
  • Kodelinje14: Skriver ut setningen "Program fullfรธrt".

Kodeutgang:

Program started.
No Grade 
Program completed.

NESTED-IF-erklรฆring

  • NESTED-IF-setningen tillater i utgangspunktet programmerere รฅ plassere en eller flere 'IF'-tilstander i en annen 'IF'-tilstand. annet enn vanlige utsagn.
  • Hver 'IF'-betingelse bรธr ha en separat 'END IF'-setning som markerer slutten av omfanget av den aktuelle .
  • 'IF'-setningen vil vurdere den nรฆrmeste 'END IF'-setningen som et endepunkt for den spesielle tilstanden.
  • Den billedlige representasjonen for NESTED-IF er vist under 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 syntaksen ovenfor inneholder den ytre IF en IF-setning til i handlingsblokken.
  • Tilstand1 returnerer , sรฅ vil kontrollen utfรธres og sjekker tilstanden1.
  • Hvis betingelse2 ogsรฅ returnerer , da vil ogsรฅ bli utfรธrt.
  • I tilfelle tilstand2 evaluerer til deretter vil SQL hoppe over .

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

Eksempel pรฅ Nested- If Statement: Stรธrst av tre tall

I dette eksemplet skal vi skrive ut det stรธrste av tre tall ved รฅ bruke Nested-If-setningen. Tallene vil bli tildelt i deklareringsdelen, som du kan se i koden nedenfor, dvs. Number= 10,15 og 20 og det maksimale antallet vil bli hentet ved hjelp av nested-if-setninger.

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: Deklarerer variabelen 'a' som 'NUMBER' datatype og initialiserer den med verdien '10'.
  • Kodelinje 3: Deklarerer variabelen 'b' som 'NUMBER' datatype og initialiserer den med verdien '15'.
  • Kodelinje 4: Deklarerer variabelen 'c' som 'NUMBER' datatype og initialiserer den med verdien '20'.
  • Kodelinje 6: Skriver ut setningen "Program startet" (linje 6).
  • Kodelinje 7: Kontrollerer betingelse1, om 'a' er stรธrre enn 'b' (linje 7).
  • Kodelinje 10: Hvis 'a' er stรธrre enn 'b, vil betingelsen i 'nested-if 1' sjekke om 'a' er stรธrre enn 'c'(linje 10).
  • Kodelinje 13: Hvis fortsatt 'a' er stรธrre, vil meldingen 'A er stรธrst' bli skrevet ut (linje 11). Ellers hvis betingelse 2 mislykkes, vil 'C er stรธrst' bli skrevet ut (linje 13).
  • Kodelinje 18: I tilfelle betingelse1 returnerer usann, vil betingelse i 'nested-if 2' sjekke om 'b' er stรธrre enn 'c'(linje 18).
  • Kodelinje 21: Hvis 'b' er stรธrre enn 'c', vil meldingen 'B er stรธrst' bli skrevet ut (linje 19), ellers hvis betingelse 2 mislykkes, vil 'C er stรธrst' bli skrevet ut (linje 21).
  • Kodelinje 24: Skriver ut erklรฆringen "Program fullfรธrt" (linje 24).

Utgang av kode:

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

Sammendrag

I dette kapittelet har vi lรฆrt de forskjellige beslutningsuttalelsene og deres syntaks og eksempler. Tabellen nedenfor gir sammendraget av ulike betingede utsagn som vi har diskutert.

TYPE BESKRIVELSE BRUK
HVIS DA Sjekker for en boolsk tilstand, hvis TRUE-koden i 'THEN'-blokken vil bli utfรธrt. For รฅ hoppe over/utfรธre en bestemt kode basert pรฅ betingelsen.
HVIS-Sร…-ANNET Sjekker for en boolsk tilstand, hvis TRUE-kode i 'THEN'-blokken vil bli utfรธrt, hvis falsk kode i 'ELSE'-blokken utfรธres. Mest hensiktsmessig i 'THIS-OR-THAT'-tilstand.
HVIS-Sร…-ELSIF Sjekker etter en boolsk tilstand i sekvensiell rekkefรธlge. Den fรธrste blokken i sekvensen som returnerer TRUE-tilstand vil bli utfรธrt. Hvis ingen av betingelsene i sekvensen er TRUE, utfรธres koden i 'ELSE'-blokken. Brukes for det meste รฅ velge mellom mer enn to alternativer.
NESTED-HVIS Tillater รฉn eller flere IF-THEN eller IF-THEN-ELSIF-setninger inne i en annen IF-THEN eller IF-THEN-ELSIF-setning(er). Brukes hovedsakelig i nestet tilstand.

Oppsummer dette innlegget med: