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".
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.
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. |