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