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.

Oppsummering

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.