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โ€.

Diagramma delle dichiarazioni sul processo decisionale
Diagramma delle dichiarazioni sul processo decisionale

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.

Istruzione NESTED-IF

Istruzione NESTED-IF

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.

Riassumi questo post con: