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

Code Spiegazione:

  • Code riga 2: Dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '10'.
  • Code riga 4: Stampa del messaggio "Programma avviato".
  • Code riga 5: Verifica della condizione, se la variabile 'a' รจ maggiore di '100'.
  • Code riga 6: Se 'a' รจ maggiore di '100', verrร  stampato "a รจ maggiore di 100". Se 'a' รจ minore o uguale a 100, la condizione non รจ soddisfatta e l'istruzione di stampa precedente viene ignorata.
  • Code riga 8: Stampa del messaggio "Programma completato".

Code Produzione:

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

Code Spiegazione:

  • Code riga 2: Dichiarare la variabile "a" come "CHAR" con tipo di dati di dimensione "1" e inizializzarla con il valore "u".
  • Code riga 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.
  • Code riga 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.

Code Produzione:

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

Code Spiegazione:

  • Code riga 2: Dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '11'.
  • Code riga 4: Stampa del messaggio "Programma avviato".
  • Code riga 5: Verifica della condizione, ovvero se il modulo della variabile 'a' per '2' รจ 0.
  • Code riga 6: Se '0', verrร  stampato "a รจ un numero pari".
  • Code riga 7: Se il valore del modulo non รจ uguale a '0', la condizione restituisce , quindi verrร  stampato il messaggio โ€œa รจ un numero dispariโ€.
  • Code riga 10: Stampa del messaggio "Programma completato"

Code Produzione:

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

Code Spiegazione:

  • Code riga 2: Dichiarazione della variabile 'mark' di tipo 'NUMBER' e inizializzazione con il valore '55'.
  • Code riga 4: Stampa del messaggio "Programma avviato".
  • Code riga 5: Verifica della condizione 1, se 'mark' รจ maggiore o uguale a 70.
  • Code riga 7: Poichรฉ la condizione 1 non รจ stata soddisfatta, viene verificata la condizione 2 '70>mark>=40'.
  • Code riga 8: La condizione2 restituisce , pertanto verrร  stampato il messaggio 'Voto B'.
  • Code riga 12: Stampa del messaggio "Programma completato".
  • In questo caso, la condizione3 'mark < 35' verrร  saltata, poichรฉ il controller ha trovato una condizione che restituisce prima della condizione 3.

Code Produzione:

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

Code Spiegazione:

  • Code riga 2: Dichiarazione della variabile 'mark' di tipo 'NUMBER' e inizializzazione con il valore '25'.
  • Code riga 4: Stampa del messaggio "Programma avviato".
  • Code riga 5: Verifica della condizione 1, ovvero se 'mark' รจ maggiore o uguale a 70.
  • Code riga 7: Poichรฉ la condizione 1 non รจ stata soddisfatta, viene verificata la condizione 2 '70>mark>=40'.
  • Code riga 8: Poichรฉ la condizione 2 non รจ stata soddisfatta, viene verificata la condizione 3 '40>mark>=35'.
  • Code riga 11: Poichรฉ tutte le condizioni non sono state soddisfatte, il controllo verificherร  ora la presenza del blocco ELSE e stamperร  il messaggio 'Nessun voto' dal blocco ELSE.
  • Code riga 14: Stampa del messaggio "Programma completato".

Code Produzione:

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

Code Spiegazione:

  • Code riga 2: Dichiarazione della variabile 'a' come tipo di dati 'NUMBER' e inizializzazione con il valore '10'.
  • Code riga 3: Dichiarazione della variabile 'b' come tipo di dati 'NUMBER' e inizializzazione con il valore '15'.
  • Code riga 4: Dichiarazione della variabile 'c' come tipo di dati 'NUMBER' e inizializzazione con il valore '20'.
  • Code riga 6: Stampa del messaggio "Programma avviato" (riga 6).
  • Code riga 7: Verifica della condizione 1, se 'a' รจ maggiore di 'b' (riga 7).
  • Code riga 10: Se 'a' รจ maggiore di 'b', allora la condizione in 'nested-if 1' verificherร  se 'a' รจ maggiore di 'c' (riga 10).
  • Code riga 13: Se 'a' รจ ancora maggiore, verrร  stampato il messaggio 'A รจ il maggiore' (riga 11). Altrimenti, se la condizione 2 non รจ soddisfatta, verrร  stampato 'C รจ il maggiore' (riga 13).
  • Code riga 18: Nel caso in cui la condizione1 restituisca falso, allora la condizione in 'nested-if 2' verificherร  se 'b' รจ maggiore di 'c' (riga 18).
  • Code riga 21: Se 'b' รจ maggiore di 'c', allora verrร  stampato il messaggio 'B รจ il maggiore' (riga 19), altrimenti, se la condizione 2 non รจ soddisfatta, allora verrร  stampato 'C รจ il maggiore' (riga 21).
  • Code riga 24: Stampa del messaggio "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: