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

⚡ Smart sammanfattning

PL/SQL-beslutsfattandesatser styr vilken kod som körs baserat på ett booleskt villkor. Oracle tillhandahåller IF-THEN, IF-THEN-ELSE, IF-THEN-ELSIF och NESTED-IF, så ett program kan hoppa över ett block, välja mellan två sökvägar eller välja ett alternativ från många.

  • 🔀 Syfte: Ett villkor som returnerar SANT eller FALSKT avgör exekveringsflödet.
  • ✅ OM-DÅ: Kör ett block endast när villkoret är SANT, annars hoppas det över.
  • ↔️ OM-SÅ-ANNARS: Väljer mellan två block, ett för SANT och ett för FALSKT.
  • 🪜 OM-SÅ-ELSIF: Testar villkor i sekvens och kör det första som är SANT, med ett valfritt ELSE.
  • 🧩 NESTED-IF: Placerar ett OM inuti ett annat OM för kombinerade villkor.
  • ⚠️ NULL-regel: Ett villkor som utvärderas till NULL behandlas som FALSKT.
  • 🔚 terminator: Varje OM måste avslutas med ett matchande END IF.

Oracle PL/SQL OM SÅ ANNARS ELSIF

Vad är beslutsfattande uttalanden?

Beslutsfattande uttalanden avgör flödeskontrollen av SQL Uttryck baserade på villkor. De ger programmeraren bättre kontroll över att förhindra att ett visst block körs, eller att välja ett önskat block baserat på ett villkor. Nedan visas en bildrepresentation av beslutsfattandeuttrycket.

Diagram för beslutsfattande
Diagram för beslutsfattande

Typer av beslutsfattande uttalanden: Oracle tillhandahåller följande typer.

  • OM DÅ
  • OM DÅ ANNARS
  • OM-DÅ-ELSIF
  • NESTAD-OM
  • CASE
  • SÖKT FALL

Den här handledningen behandlar IF-varianterna. CASE- och sökta CASE-formulär behandlas i PL/SQL CASE-sats guide.

OM-DÅ-uttalande

IF-THEN-satsen används för att köra en viss del av koden endast när ett villkor är uppfyllt. Villkoret ska ge en Boolean (Sant/Falskt) värde. Det är en grundläggande villkorlig sats som låter Oracle köra eller hoppa över en kodstycke baserat på det fördefinierade villkoret.

Syntax för IF-THEN-satser:

IF <condition: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block>
END IF;
  • I syntaxen ovan följs nyckelordet 'OM' av ett villkor som utvärderas till 'SANT' eller 'FALSKT'.
  • Kontrollen utför endast om tillståndet återkommer .
  • Om villkoret utvärderas till , SQL hoppar över och börjar exekvera koden efter blocket 'END IF'.

Obs: När ett villkor utvärderas till 'NULL' behandlar SQL 'NULL' som 'FALSKT'.

Exempel 1: I det här exemplet skriver vi ut ett meddelande när talet är större än 100.

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;
/

Code Förklaring:

  • Code rad 2: Deklarerar variabeln 'a' som datatypen 'NUMBER' och initierar den med värdet '10'.
  • Code rad 4: Skriver ut meddelandet ”Programmet startade”.
  • Code rad 5: Kontrollerar villkoret om variabeln 'a' är större än '100'.
  • Code rad 6: Om 'a' är större än '100', skrivs "a är större än 100" ut. Om 'a' är mindre än eller lika med 100, misslyckas villkoret och utskriftssatsen ignoreras.
  • Code rad 8: Skriver ut meddelandet ”Program slutfört”.

Code Produktion:

Program started.
Program completed.

Exempel 2: I det här exemplet skriver vi ut ett meddelande om en given bokstav är en engelsk vokal (A, E, I, O, U).

DECLARE
a CHAR(1) := 'u';
BEGIN
IF UPPER(a) in ('A','E','I','O','U' ) THEN
dbms_output.put_line('The character is in English Vowels');
END IF;
END;
/

Code Förklaring:

  • Code rad 2: Deklarera variabeln 'a' som 'CHAR' av storlek '1' och initiera den med värdet 'u'.
  • Code rad 4: Kontrollerar om variabeln 'a' finns i listan ('A', 'E', 'I', 'O', 'U'). Värdet på 'a' konverteras till versaler före jämförelse, för att göra jämförelsen skiftläges-okänslig.
  • Code rad 5: Om 'a' finns i listan skrivs "Tecknet är i engelska vokaler" ut. Om villkoret misslyckas ger programmet ingen utdata, eftersom det inte finns någon utskriftssats utanför IF-THEN-blocket.

Code Produktion:

The character is in English Vowels

OM-DÅ-ANNARS uttalande

IF-THEN-ELSE-satsen används för att välja mellan två alternativ baserat på ett villkor. Nedan följer syntaxen.

Syntax för IF-THEN-ELSE-satser:

IF <condition: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block1>
ELSE
-execute if the condition failed (returns FALSE)
<action_block2>
END IF;
  • Nyckelordet 'OM' följs av ett villkor som utvärderas till 'SANT' eller 'FALSKT'.
  • Kontrollen körs endast om tillståndet återkommer .
  • Om villkoret utvärderas till , SQL körs .
  • I vilket fall som helst exekveras ett av de två åtgärdsblocken.

Obs: När ett villkor utvärderas till 'NULL' behandlar SQL 'NULL' som 'FALSKT'.

Exempel 1: I det här exemplet skriver vi ut om det givna talet ä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 number');
END IF;
dbms_output.put_line ('Program completed.');
END;
/

Code Förklaring:

  • Code rad 2: Deklarerar variabeln 'a' som datatypen 'NUMBER' och initierar den med värdet '11'.
  • Code rad 4: Skriver ut meddelandet ”Programmet startade”.
  • Code rad 5: Kontroll av om modulen för variabeln 'a' med '2' är 0.
  • Code rad 6: Om '0', skrivs "a är ett jämnt tal" ut.
  • Code rad 7: Om modulvärdet inte är lika med '0' returnerar villkoret , så ”a är ett udda tal” skrivs ut.
  • Code rad 10: Skriver ut meddelandet ”Program slutfört”.

Code Produktion:

Program started.
a is odd number
Program completed.

OM-DÅ-ELSIF-uttalande

  • IF-THEN-ELSIF-satsen används där ett alternativ ska väljas från en uppsättning alternativ, där varje alternativ har sitt eget villkor.
  • Det första villkoret som återkommer körs och de återstående villkoren hoppas över.
  • IF-THEN-ELSIF-satsen kan innehålla ett 'ELSE'-block, som körs om inget av villkoren är uppfyllt.

Obs: ELSE-blocket är valfritt. Om det inte finns något ELSE-block och inget av villkoren är uppfyllda, hoppar kontrollenheten över alla actionblock och exekverar den återstående koden.

Syntax för IF-THEN-ELSIF-satser:

IF <condition1: returns Boolean>
THEN
-executed only if the condition returns TRUE
<action_block1>
ELSIF <condition2: returns Boolean> THEN
<action_block2>
ELSIF <condition3: returns Boolean> THEN
<action_block3>
ELSE --optional
<action_block_else>
END IF;
  • Kontrollen körs endast om villkor1 returnerar .
  • Om villkor 1 inte är uppfyllt kontrollerar styrenheten villkor 2, och så vidare.
  • Kontrollern avslutar IF-satsen när den hittar ett villkor som returnerar och kör det matchande åtgärdsblocket, eller när inget är uppfyllt och ELSE-blocket (om det finns) körs.

Obs: När ett villkor utvärderas till 'NULL' behandlar SQL 'NULL' som 'FALSKT'.

Exempel 1: Utan ett ELSE-block. I det här exemplet skriver vi ut betyget baserat på de givna poängen utan ett annat villkor (poäng >= 70 Betyg A, poäng >= 40 och poäng < 70 Betyg B, poäng >= 35 och poäng < 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;
/

Code Förklaring:

  • Code rad 2: Deklarerar variabeln 'mark' som datatypen 'NUMBER' och initierar den med värdet '55'.
  • Code rad 4: Skriver ut meddelandet ”Programmet startade”.
  • Code rad 5: Kontrollerar villkor 1, om 'mark' är större än eller lika med 70.
  • Code rad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70 > mark >= 40′.
  • Code rad 8: Villkor2 returnerar , så meddelandet 'Betyg B' skrivs ut.
  • Code rad 12: Skriver ut påståendet ”Program slutfört”. Villkor 3 'poäng < 35' hoppas över, eftersom ett SANT-villkor redan hittades.

Code Produktion:

Program started.
Grade B
Program completed.

Exempel 2: Med ett ELSE-block. I det här exemplet skriver vi ut betyget baserat på de givna poängen med ett annat villkor (poäng >= 70 Betyg A, poäng >= 40 och poäng < 70 Betyg B, poäng >= 35 och poäng < 40 Betyg C, annars '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;
/

Code Förklaring:

  • Code rad 2: Deklarerar variabeln 'mark' som datatypen 'NUMBER' och initierar den med värdet '25'.
  • Code rad 4: Skriver ut meddelandet ”Programmet startade”.
  • Code rad 5: Kontrollerar villkor 1, om 'mark' är större än eller lika med 70.
  • Code rad 7: Eftersom villkor1 misslyckades, kontrolleras villkor2 '70 > mark >= 40′.
  • Code rad 9: Eftersom villkor2 misslyckades, kontrolleras villkor3 '40 > mark >= 35′.
  • Code rad 11: Eftersom alla villkor misslyckades, kontrollerar kontrollen ELSE-blocket och skriver ut 'Inget betyg'.
  • Code rad 14: Skriver ut meddelandet ”Program slutfört”.

Code Produktion:

Program started.
No Grade
Program completed.

NESTED-IF-uttalande

  • NESTED-IF-satsen låter programmerare placera ett eller flera 'IF'-villkor inuti ett annat 'IF'-villkor. .
  • Varje 'OM'-villkor ska ha en separat 'END IF'-sats, som markerar slutet på omfattningen för det specifika villkoret .
  • 'IF'-satsen betraktar närmaste 'END IF' som slutpunkt för det villkoret.
  • Den bildliga representationen för NESTED-IF visas nedan.

Flöde för kapslade IF-satser

Kapslade IF-uttrycksstruktur

IF <condition1: 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_block1 ends>
END IF; --END IF corresponds to condition1

Syntaxförklaring:

  • Det yttre IF-värdet innehåller ytterligare ett IF-uttryck i sitt åtgärdsblock.
  • Om villkor1 returnerar , kontrollen körs och kontrollerar skick2.
  • Om villkor2 också returnerar , sedan är också avrättad.
  • Om villkor2 utvärderas till , SQL hoppar över .

Exempel på nästlad OM-sats: Störst av tre tal. I det här exemplet skriver vi ut det största av tre tal med hjälp av en nästlad om-sats. Talen tilldelas i deklarationsdelen (Number = 10, 15 och 20), och det största talet hämtas med hjälp av nästlade om-satser.

DECLARE
a NUMBER := 10;
b NUMBER := 15;
c NUMBER := 20;
BEGIN
dbms_output.put_line('Program started.');
IF( a > b)THEN
/*Nested-if 1 */
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;
/

Code Förklaring:

  • Code rad 2-4: Deklarerar variablerna 'a', 'b' och 'c' som 'NUMBER' och initierar dem med 10, 15 och 20.
  • Code rad 6: Skriver ut meddelandet ”Programmet startade”.
  • Code rad 7: Kontrollerar villkor 1, om 'a' är större än 'b'.
  • Code rad 10: Om 'a' är större än 'b' kontrollerar den nästlade om-funktionen 1 om 'a' är större än 'c'.
  • Code rad 11-13: Om 'a' fortfarande är större, skrivs 'A är störst'; annars skrivs 'C är störst'.
  • Code rad 18: Om villkor1 returnerar falskt, kontrollerar nested-if 2 om 'b' är större än 'c'.
  • Code rad 19-21: Om 'b' är större än 'c' skrivs 'B är ​​störst'; annars skrivs 'C är störst'.
  • Code rad 24: Skriver ut meddelandet ”Program slutfört”.

Utmatning av kod:

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

Jämförelse av beslutsfattande uttalanden

Tabellen nedan sammanfattar de olika villkorssatser som diskuteras, så att den rätta kan väljas för en given situation.

Typ BESKRIVNING Användning
OM DÅ Kontrollerar ett booleskt villkor; om det är SANT körs koden i blocket 'THEN'. Att hoppa över eller exekvera ett visst block baserat på villkoret.
OM DÅ ANNARS Kontrollerar ett booleskt villkor; om SANT körs 'THEN'-blocket, om FALSKT körs 'ELSE'-blocket. Mest lämpligt i ett "det här eller det där"-läge.
OM-DÅ-ELSIF Kontrollerar villkor i sekvens. Det första blocket som returnerar TRUE körs. Om inget av dem är TRUE körs 'ELSE'-blocket. Används för att välja mellan fler än två alternativ.
NESTAD-OM Tillåter en eller flera IF-THEN- eller IF-THEN-ELSIF-satser inuti en annan. Används huvudsakligen i en kapslad situation.

Vanliga frågor

ELSIF testar en platt sekvens av ömsesidigt uteslutande villkor. Ett kapslat IF placerar ett villkor inuti ett annat, så det inre testet körs först efter att det yttre redan är SANT.

Ett villkor som utvärderas till NULL behandlas som FALSE, så dess THEN-block hoppas över. Detta är viktigt när ett jämfört värde kan vara null, eftersom grenen inte kommer att köras som en nybörjare kan förvänta sig.

CASE blir tydligare när ett uttryck jämförs med många fasta värden. IF-THEN-ELSIF passar oberoende intervallvillkor. Båda kan uttrycka samma logik, men CASE läses bättre för värdematchning.

Ja. AI kan platta ut kapslade IF:er till en ELSIF-kedja eller ett CASE, och identifiera villkor som aldrig kan uppnås. Testa omskrivningen, eftersom omordningsvillkor kan ändra vilken gren som körs.

END IF markerar var det villkorliga blocket slutar, vilket är viktigt när IF:er är kapslade. Utan det kan kompilatorn inte avgöra vilka satser som hör till villkoret, och det genererar ett fel.

Sammanfatta detta inlägg med: