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

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;
/
Kodfรถrklaring:
- Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med vรคrdet '10'.
- Kodrad 4: Skriver ut satsen "Program started".
- Kodrad 5: Kontrollera villkoret, om variabel 'a' รคr stรถrre รคn '100'.
- Kodrad 6: Om 'a' รคr stรถrre รคn '100' kommer โa รคr stรถrre รคn 100โ att skrivas ut. Om 'a' รคr mindre รคn eller lika med 100, misslyckas villkoret, sรฅ ovanstรฅende utskriftssats ignoreras.
- Kodrad 8: Skriver ut meddelandet "Program completed".
Kodutgรฅng:
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;
/
Kodfรถrklaring:
- Kodrad 2: Deklarera variabeln 'a' som 'CHAR' av storleken '1' datatyp och initialisera den med vรคrdet 'u'.
- Kodrad 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.
- Kodrad 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.
Kodutgรฅng:
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;
/
Kodfรถrklaring:
- Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med vรคrdet '11'.
- Kodrad 4: Skriver ut satsen "Program started".
- Kodrad 5: Kontrollera villkoret, om modulen fรถr variabel 'a' med '2' รคr 0.
- Kodrad 6: Om '0' kommer "a รคr jรคmnt nummer" att skrivas ut.
- Kodrad 7: Om modulvรคrdet inte รคr lika med '0' returneras villkoret , sรฅ meddelandet "a รคr udda nummer" kommer att skrivas ut.
- Kodrad 10: Skriver ut pรฅstรฅendet "Program completed"
Kodutgรฅng:
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; /
Kodfรถrklaring:
- Kodrad 2: Deklarerar variabeln 'mark' som 'NUMBER' datatyp och initierar den med vรคrdet '55'.
- Kodrad 4: Skriver ut satsen "Program started".
- Kodrad 5: Kontrollera villkor1, om 'mark' รคr stรถrre eller lika med 70.
- Kodrad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70>mark>=40'.
- Kodrad 8: Condition2 returnerar , dรคrfรถr kommer meddelandet 'Grade B' att skrivas ut.
- Kodrad 12: Skriver ut pรฅstรฅendet "Program completed".
- I det hรคr fallet kommer condition3 'mark < 35' att hoppas รถver, eftersom styrenheten hittade ett tillstรฅnd som returnerar fรถre tillstรฅnd3.
Kodutgรฅng:
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; /
Kodfรถrklaring:
- Kodrad 2: Deklarerar variabeln 'mark' som 'NUMBER' datatyp och initierar den med vรคrdet '25'.
- Kodrad 4: Skriver ut satsen "Program started".
- Kodrad 5: Kontrollera villkor 1, om 'mark' รคr stรถrre eller lika med 70.
- Kodrad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70>mark>=40'.
- Kodrad 8: Eftersom villkor2 misslyckades, kontrolleras villkor3 '40>mark>=35'.
- Kodrad 11: Eftersom alla villkor รคr misslyckade kommer kontrollen nu att kontrollera om det finns ett ELSE-block, och det kommer att skriva ut meddelandet 'No Grade' frรฅn ELSE-blocket.
- Kodrad 14: Skriver ut pรฅstรฅendet "Program completed".
Kodutgรฅng:
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.
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;
/
Kodfรถrklaring:
- Kodrad 2: Deklarerar variabeln 'a' som datatyp 'NUMBER' och initierar den med vรคrdet '10'.
- Kodrad 3: Deklarerar variabeln 'b' som datatyp 'NUMBER' och initierar den med vรคrdet '15'.
- Kodrad 4: Deklarerar variabeln 'c' som datatyp 'NUMBER' och initierar den med vรคrdet '20'.
- Kodrad 6: Skriver ut satsen "Program started" (rad 6).
- Kodrad 7: Kontrollera villkor1, om 'a' รคr stรถrre รคn 'b' (rad 7).
- Kodrad 10: Om 'a' รคr stรถrre รคn 'b' kommer villkoret i 'kapslade-om 1' att kontrollera om 'a' รคr stรถrre รคn 'c' (rad 10).
- Kodrad 13: Om fortfarande 'a' รคr stรถrre, kommer meddelandet 'A รคr stรถrst' att skrivas ut (rad 11). Annars, om villkor 2 misslyckas, kommer 'C รคr stรถrst' att skrivas ut (rad 13).
- Kodrad 18: Om villkor1 returnerar falskt, kommer villkoret i 'kapslade-om 2' att kontrollera om 'b' รคr stรถrre รคn 'c' (rad 18).
- Kodrad 21: Om 'b' รคr stรถrre รคn 'c' kommer meddelandet 'B รคr โโstรถrst' att skrivas ut (rad 19), annars kommer 'C รคr stรถrst' att skrivas ut om villkor 2 misslyckas (rad 21).
- Kodrad 24: Skriver ut meddelandet "Program completed" (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. |


