Oracle Istruzione PL/SQL IF THEN ELSE: ELSIF, NESTED-IF
Cosa sono le dichiarazioni decisionali?
Le dichiarazioni decisionali sono quelle che decideranno il controllo del flusso SQL dichiarazioni basate sulle condizioni. Offre al programmatore un migliore controllo per impedire l'esecuzione di un particolare codice (diagramma 1) o scegliere il codice desiderato in base alla condizione (diagramma 2). Di seguito la rappresentazione pittorica del โDecision Making Statementโ.

Tipi di dichiarazioni decisionali:
Oracle fornisce i seguenti tipi di dichiarazioni decisionali.
- SE POI
- SE-POI-ALTRO
- SE-THEN-ELSIF
- NIDSATO-IF
- CASI
- CASO RICERCATO
Dichiarazione IF-THEN
L'istruzione IF-THEN viene utilizzata principalmente per eseguire una particolare sezione di codice solo quando la condizione รจ soddisfatta.
La condizione dovrebbe cedere Booleano (Vero falso). Si tratta di un'istruzione condizionale di base che consentirร a ORACLE di eseguire/saltare una particolare parte di codice in base alle condizioni predefinite.
Sintassi per le istruzioni IF THEN:
IF <condition: returns Boolean> THEN -executed only if the condition returns TRUE <action_block> END if;
- Nella sintassi precedente, la parola chiave "IF" sarร seguita da una condizione che restituisce "TRUE"/"FALSE".
- Il controllo eseguirร il solo se la condizione ritorna .
- Nel caso della condizione valuta a quindi, SQL salterร il file e inizierร a eseguire il codice accanto al blocco "END IF".
Nota: Ogni volta che la condizione viene valutata come "NULL", SQL tratterร "NULL" come "FALSE".
esempio 1: In questo esempio, stamperemo un messaggio quando il numero รจ maggiore di 100. Per questo, eseguiremo il seguente codice
Per stampare un messaggio quando un numero ha un valore superiore a 100, eseguiamo il seguente codice.
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;
/
Spiegazione del codice:
- Riga di codice 2: dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '10'.
- Riga di codice 4: Stampa della dicitura โProgramma avviatoโ.
- Riga di codice 5: verifica della condizione, se la variabile "a" รจ maggiore di "100".
- Riga di codice 6: Se 'a' รจ maggiore di '100', verrร stampato "a รจ maggiore di 100". Se 'a' รจ minore o uguale a 100, la condizione fallisce, quindi l'istruzione di stampa precedente viene ignorata.
- Riga di codice 8: Stampa della dicitura โProgramma completatoโ.
Uscita codice:
Program started. Program completed.
Esempio 2: In questo esempio, stamperemo un messaggio se un dato alfabeto รจ presente nelle vocali inglesi (A, E, I, O, U).
Per stampare un messaggio quando il carattere specificato รจ una vocale, eseguiamo il seguente codice.
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;
/
Spiegazione del codice:
- Riga di codice 2: Dichiarare la variabile "a" come "CHAR" con tipo di dati di dimensione "1" e inizializzarla con il valore "u".
- Riga di codice 4: Verifica della condizione, se la variabile 'a' รจ presente nell'elenco ('A','E','I','O','U').
- Il valore di "a" รจ stato convertito in maiuscolo prima del confronto per fare in modo che il confronto non faccia distinzione tra maiuscole e minuscole.
- Riga di codice 5: Se nell'elenco รจ presente la lettera "a", verrร stampata la frase "Il carattere รจ nelle vocali inglesi". Se la condizione fallisce, questo programma non fornirร alcun output, poichรฉ al di fuori del blocco IF-THEN non abbiamo emesso alcuna istruzione di stampa.
Uscita codice:
The character is in English Vowels
Dichiarazione IF-THEN-ELSE
- L'istruzione IF-THEN-ELSE viene utilizzata principalmente per selezionare tra due alternative in base alla condizione.
- Di seguito รจ riportata la rappresentazione della sintassi dell'istruzione IF-THEN-ELSE.
Sintassi per le istruzioni IF-THEN-ELSE:
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;
- Nella sintassi precedente, la parola chiave "IF" sarร seguita da una condizione che restituisce "TRUE"/"FALSE".
- Il controllo eseguirร il solo se la condizione ritorna .
- In caso di condizione valuta a quindi, SQL verrร eseguito .
- In ogni caso verrร eseguito uno dei due blocchi di azioni.
Nota: Ogni volta che la condizione restituisce "NULL", SQL tratterร "NULL" come "FALSE".
esempio 1: In questo esempio, stamperemo il messaggio se il numero indicato รจ pari o dispari.
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;
/
Spiegazione del codice:
- Riga di codice 2: dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '11'.
- Riga di codice 4: Stampa della dicitura โProgramma avviatoโ.
- Riga di codice 5: verifica della condizione, se il modulo della variabile 'a' per '2' รจ 0.
- Riga di codice 6: Se '0', verrร stampato "a รจ un numero pari".
- Riga di codice 7: se il valore del modulo non รจ uguale a "0", la condizione ritorna , quindi verrร stampato il messaggio โa รจ un numero dispariโ.
- Riga di codice10: stampa della dicitura โProgramma completatoโ
Uscita codice:
Program started. a is odd number Program completed.
Istruzione IF-THEN-ELSIF
- L'istruzione IF-THEN-ELSIF viene utilizzata principalmente quando un'alternativa deve essere scelta da un insieme di alternative, dove ciascuna alternativa ha le proprie condizioni da soddisfare.
- Le prime condizioni che ritornano verrร eseguito e le restanti condizioni verranno ignorate.
- L'istruzione IF-THEN-ELSIF puรฒ contenere il blocco "ELSE". Questo blocco 'ELSE' verrร eseguito se nessuna delle condizioni รจ soddisfatta.
Note:: Il blocco ELSE รจ facoltativo in questa istruzione condizionale. Se non รจ presente alcun blocco ELSE e nessuna condizione รจ soddisfatta, il controller salterร tutto il blocco di azioni e inizierร a eseguire la parte rimanente del codice.
Sintassi per le istruzioni IF-THEN-ELSIF:
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;
- Nella sintassi precedente, il controllo eseguirร il file solo se ritorna la condizione1 .
- Se la condizione1 non รจ soddisfatta, il controller controllerร la condizione2.
- Il controller uscirร dall'istruzione IF nei due casi seguenti.
- Quando il controller rileva una condizione che ritorna . In questo caso, verrร eseguito il corrispondente action_block e il controller uscirร da questo blocco di istruzioni IF e inizierร a eseguire il codice rimanente.
- Quando nessuna delle condizioni รจ soddisfatta, il controller eseguirร il blocco ELSE, se presente, quindi uscirร dall'istruzione IF.
Nota: Ogni volta che la condizione restituisce "NULL", SQL tratterร "NULL" come "FALSE".
Esempio 1: Senza blocco ELSE
In questo esempio, stamperemo il voto in base ai voti dati senza altre condizioni (voto >= 70 Grado A, voto >=40 e voto<70 Grado B, voto >=35 e voto<40 Grado 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; /
Spiegazione del codice:
- Riga di codice 2: dichiarazione della variabile 'mark' come tipo di dati 'NUMBER' e inizializzazione con il valore '55'.
- Riga di codice 4: Stampa della dicitura โProgramma avviatoโ.
- Riga di codice 5: controllo della condizione1, se 'mark' รจ maggiore o uguale a 70.
- Riga di codice 7: Poichรฉ la condizione1 รจ fallita, viene verificata la condizione2 '70>mark>=40โฒ.
- Riga di codice 8: ritorna la condizione2 , quindi verrร stampato il messaggio "Grado B".
- Riga codice12: Stampa della dicitura โProgramma completatoโ.
- In questo caso, la condizione3 'mark < 35' verrร saltata, poichรฉ il controller ha trovato una condizione che restituisce prima della condizione 3.
Uscita codice:
Program started. Grade B Program completed.
esempio 2: Con blocco ELSE
In questo esempio, stamperemo il voto in base ai voti dati con altra condizione (voto >= 70 Grado A, voto >=40 e voto<70 Grado B, voto >=35 e voto<40 Grado C, altrimenti "Nessun voto").
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; /
Spiegazione del codice:
- Riga di codice 2: dichiarazione della variabile 'mark' come tipo di dati 'NUMBER' e inizializzazione con il valore '25'.
- Riga di codice 4: Stampa della dicitura โProgramma avviatoโ.
- Riga di codice 5: verifica della condizione 1, se 'mark' รจ maggiore o uguale a 70.
- Riga di codice 7: Poichรฉ la condizione1 รจ fallita, viene verificata la condizione2 '70>mark>=40โฒ.
- Riga di codice 8: Poichรฉ la condizione2 รจ fallita, viene verificata la condizione3 '40>mark>=35โฒ.
- Riga di codice 11: Poichรฉ tutte le condizioni non sono soddisfatte, il controllo controllerร ora la presenza del blocco ELSE e stamperร il messaggio "No Grade" dal blocco ELSE.
- Riga codice14: Stampa della dicitura โProgramma completatoโ.
Uscita codice:
Program started. No Grade Program completed.
Istruzione NESTED-IF
- L'istruzione NESTED-IF consente sostanzialmente ai programmatori di inserire una o piรน condizioni "IF" all'interno di un'altra condizione "IF" diverse dalle normali dichiarazioni.
- Ciascuna condizione "IF" dovrebbe avere un'istruzione "END IF" separata che segna la fine dell'ambito di quella particolare condizione .
- L'istruzione 'IF' considererร l'istruzione 'END IF' piรน vicina come punto finale per quella particolare condizione.
- La rappresentazione pittorica di NESTED-IF รจ mostrata sotto il diagramma.
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
Spiegazione della sintassi:
- Nella sintassi precedente, l'IF esterno contiene un'ulteriore istruzione IF nel suo blocco di azione.
- La condizione1 ritorna , il controllo verrร eseguito e controlla la condizione1.
- Se ritorna anche la condizione2 , Poi verrร anche giustiziato.
- In caso di condizione2 vale quindi, SQL salterร il file .
Qui vedremo un esempio di Nested If โ
Esempio di istruzione Nested-If: il maggiore di tre numeri
In questo esempio, stamperemo il maggiore dei tre numeri utilizzando l'istruzione Nested-If. I numeri verranno assegnati nella parte dichiarata, come puoi vedere nel codice seguente, ovvero Number= 10,15 e 20 e il numero massimo verrร recuperato utilizzando le istruzioni annidate-if.
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;
/
Spiegazione del codice:
- Riga di codice 2: dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '10'.
- Riga di codice 3: dichiarazione della variabile 'b' come tipo di dati 'NUMBER' e inizializzazione con il valore '15'.
- Riga di codice 4: dichiarazione della variabile 'c' come tipo di dati 'NUMBER' e inizializzazione con il valore '20'.
- Riga di codice 6: Stampa della frase โProgramma avviatoโ (riga 6).
- Riga di codice 7: verifica della condizione1, se 'a' รจ maggiore di 'b' (riga 7).
- Riga di codice 10: se 'a' รจ maggiore di 'b, la condizione in 'nested-if 1' controllerร se 'a' รจ maggiore di 'c' (riga 10).
- Riga di codice 13: Se ancora 'a' รจ maggiore, verrร stampato il messaggio 'A รจ maggiore' (riga 11). Altrimenti se la condizione2 fallisce, verrร stampato "C รจ il piรน grande" (riga 13).
- Riga di codice 18: nel caso in cui condizione1 restituisca falso, la condizione in "nested-if 2" controllerร se "b" รจ maggiore di "c" (riga 18).
- Riga di codice 21: Se 'b' รจ maggiore di 'c' , verrร stampato il messaggio 'B รจ il massimo' (riga 19), altrimenti se la condizione2 fallisce, verrร stampato 'C รจ il massimo' (riga 21).
- Riga di codice 24: Stampa della frase โProgramma completatoโ (riga 24).
Uscita del codice:
Program started. Checking Nested-IF 2 C is greatest Program completed.
Sintesi
In questo capitolo abbiamo imparato le diverse dichiarazioni decisionali, la loro sintassi ed esempi. La tabella seguente fornisce il riepilogo delle varie dichiarazioni condizionali di cui abbiamo discusso.
| TIPO | DESCRIZIONE | USO |
|---|---|---|
| SE POI | Verifica la presenza di una condizione booleana, se verrร eseguito il codice TRUE nel blocco "THEN". | Per saltare/eseguire un codice particolare in base alla condizione. |
| SE-POI-ALTRO | Controlla una condizione booleana, se verrร eseguito il codice TRUE nel blocco 'THEN', se verrร eseguito il codice false nel blocco 'ELSE'. | Piรน appropriato nella condizione 'QUESTO O QUELLO'. |
| SE-THEN-ELSIF | Verifica la presenza di una condizione booleana in ordine sequenziale. Verrร eseguito il primo blocco della sequenza che restituisce la condizione TRUE. Se nessuna delle condizioni nella sequenza รจ VERA, viene eseguito il codice nel blocco 'ELSE'. | Principalmente sceglievo tra piรน di due alternative. |
| NIDSATO-IF | Consente una o piรน istruzioni IF-THEN o IF-THEN-ELSIF all'interno di un'altra istruzione IF-THEN o IF-THEN-ELSIF. | Utilizzato principalmente in situazioni di condizioni nidificate. |


