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