Oracle PL / SQL IF THEN ELSE Istruzione: ELSIF, NESTED-IF

Sommario:

Anonim

Cosa sono le dichiarazioni sul processo decisionale?

Le dichiarazioni decisionali sono coloro che decideranno il controllo del flusso delle istruzioni SQL in base alle condizioni. Offre al programmatore un controllo migliore per impedire l'esecuzione di un codice particolare (diagramma 1) o per scegliere un codice desiderato in base alla condizione (diagramma 2). Di seguito è riportata la rappresentazione pittorica della "Dichiarazione sul processo decisionale".

Diagramma di dichiarazione del processo decisionale

Tipi di dichiarazioni sul processo decisionale:

Oracle fornisce i seguenti tipi di dichiarazioni sul processo decisionale.

  • SE POI
  • SE-ALLORA-ALTRIMENTI
  • SE-ALLORA-ELSIF
  • NIDATO-SE
  • ASTUCCIO
  • CASO RICERCATO

In questo tutorial imparerai-

  • Introduzione alle dichiarazioni sul processo decisionale
  • Dichiarazione IF-THEN
  • Istruzione IF-THEN-ELSE
  • Istruzione IF-THEN-ELSIF
  • Istruzione NESTED-IF

Dichiarazione IF-THEN

L'istruzione IF-THEN viene utilizzata principalmente per eseguire una particolare sezione di codici solo quando la condizione è soddisfatta.

La condizione dovrebbe restituire Boolean (True / False). È un'istruzione condizionale di base che consentirà a ORACLE di eseguire / saltare un particolare pezzo di codice in base alle condizioni predefinite.

Sintassi per istruzioni IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • Nella sintassi precedente, la parola chiave "IF" sarà seguita da una condizione che restituisce "TRUE" / "FALSE".
  • Il controllo eseguirà solo se la condizione restituisce .
  • Nel caso in cui la condizione restituisca , SQL salterà e inizierà l'esecuzione del codice accanto al blocco "END IF".

Nota: ogni volta che la condizione è valutata su "NULL", SQL tratterà "NULL" come "FALSE".

Esempio 1 : in questo esempio, stamperemo un messaggio quando il numero è maggiore di 100. Per questo, eseguiremo il codice seguente

Per stampare un messaggio quando un numero ha valore superiore a 100, eseguiamo il seguente codice.

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_output.put_line('a is greater than 100');END IF;dbms_output.put_line(‘Program completed.');END;/

Spiegazione del codice:

  • Riga codice 2: dichiarazione della variabile "a" come tipo di dati "NUMERO" e inizializzazione con valore "10".
  • Riga di codice 4: stampa dell'istruzione "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 sopra viene ignorata.
  • Riga di codice 8: stampa dell'istruzione "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 dato è Vowel, eseguiamo il codice seguente.

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_output.put_line(‘The character is in English Vowels');END IF;END;/

Spiegazione del codice:

  • Riga di codice 2: dichiarazione della variabile "a" come "CHAR" di tipo di dati di dimensione "1" e inizializzazione con 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 rendere il confronto senza distinzione tra maiuscole e minuscole.
  • Riga di codice 5: se nell'elenco è presente "a", verrà stampata la frase "Il carattere è in vocali inglesi". Se la condizione fallisce, questo programma non darà 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

Istruzione 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 dichiarazioni IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • Nella sintassi precedente, la parola chiave "IF" sarà seguita da una condizione che restituisce "TRUE" / "FALSE".
  • Il controllo eseguirà solo se la condizione restituisce .
  • Nel caso in cui la condizione restituisca , SQL eseguirà .
  • In ogni caso verrà eseguito uno dei due blocchi di azione.

Nota: ogni volta che la condizione restituisce "NULL", SQL tratterà "NULL" come "FALSE".

Esempio 1 : in questo esempio, stamperemo un messaggio se il numero specificato è pari o dispari.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_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 "NUMERO" e inizializzazione con valore "11".
  • Riga di codice 4: stampa dell'istruzione "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 restituisce , quindi verrà stampato il messaggio "a è un numero dispari".
  • Riga di codice 10: stampa dell'istruzione "Programma completato"

Uscita codice:

Program started.a is odd numberProgram completed. 

Istruzione IF-THEN-ELSIF

  • L'istruzione IF-THEN-ELSIF viene utilizzata principalmente quando è necessario scegliere un'alternativa da un insieme di alternative, in cui ciascuna alternativa ha le proprie condizioni da soddisfare.
  • Le prime condizioni che restituiscono verranno eseguite e le condizioni rimanenti verranno ignorate.
  • L'istruzione IF-THEN-ELSIF può contenere il blocco "ELSE". Questo blocco "ELSE" verrà eseguito se nessuna delle condizioni è soddisfatta.

Nota : il blocco ELSE è facoltativo in questa istruzione condizionale. Se non è presente alcun blocco ELSE e nessuna delle condizioni è soddisfatta, il controller salterà tutto il blocco azione e inizierà a eseguire la parte rimanente del codice.

Sintassi per le dichiarazioni IF-THEN-ELSIF:

IF THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • Nella sintassi precedente, il controllo eseguirà solo se la condizione1 restituisce .
  • Se la condizione1 non è soddisfatta, il controller verificherà la condizione2.
  • Il controller uscirà dall'istruzione IF nei due casi seguenti.
    • Quando il controller ha rilevato una condizione che restituisce . 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 allora 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 altra condizione (voto> = 70 Grado A, voto> = 40 e voto <70 Grado B, voto> = 35 e voto <40 Grado C).

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_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 dell'istruzione "Programma avviato".
  • Riga di codice 5: verifica della condizione1, se "mark" è maggiore o uguale a 70.
  • Riga di codice 7: poiché la condizione1 non è riuscita, viene controllata la condizione2 '70> mark> = 40 '.
  • Riga di codice 8: la condizione2 restituisce , quindi verrà stampato il messaggio "Grado B".
  • Riga di codice 12: stampa dell'istruzione "Programma completato".
  • In questo caso, la condizione3 'mark <35' verrà saltata, poiché il controller ha trovato una condizione che restituisce prima della condizione3.

Uscita codice:

Program started.Grade BProgram completed.

Esempio 2 : con blocco ELSE

In questo esempio, stamperemo il voto in base ai voti dati con un'altra condizione (voto> = 70 Grado A, segno> = 40 e segno <70 Grado B, segno> = 35 e segno <40 Grado C, altrimenti 'Nessun voto').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_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 dell'istruzione "Programma avviato".
  • Riga di codice 5: verifica della condizione 1, se "mark" è maggiore o uguale a 70.
  • Riga di codice 7: poiché la condizione1 non è riuscita, viene controllata la condizione2 '70> mark> = 40 '.
  • Riga di codice 8: poiché la condizione2 non è riuscita, viene selezionata la condizione3 '40> mark> = 35 '.
  • Riga di codice 11: poiché tutte le condizioni sono fallite, il controllo ora verificherà la presenza del blocco ELSE e stamperà il messaggio "No Grade" dal blocco ELSE.
  • Riga di codice 14: stampa dell'istruzione "Programma completato".

Uscita codice:

Program started.No GradeProgram completed.

Istruzione NESTED-IF

  • L'istruzione NESTED-IF è fondamentalmente consentita ai programmatori di inserire una o più condizioni 'IF' all'interno di di un'altra condizione 'IF' diverse dalle normali istruzioni.
  • Ogni condizione "IF" dovrebbe avere un'istruzione "END IF" separata che segna la fine dell'ambito di quel particolare .
  • L'istruzione "IF" considererà l'istruzione "END IF" più vicina come un punto finale per quella particolare condizione.
  • La rappresentazione pittorica di NESTED-IF è mostrata sotto il diagramma.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END 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 restituisce , quindi il controllo eseguirà e verificherà la condizione2.
  • Se condition2 restituisce anche , verrà eseguito anche .
  • Nel caso in cui condition2 restituisca , SQL salterà .

Qui vedremo un esempio di Nested If -

Esempio di istruzione If annidata: il più grande di tre numeri

In questo esempio, stamperemo il massimo di tre numeri utilizzando l'istruzione Nested-If. I numeri verranno assegnati nella parte di dichiarazione, come puoi vedere nel codice sottostante, ad esempio Number = 10,15 e 20 e il numero massimo verrà recuperato utilizzando istruzioni nidificate-if.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_output.put_line(’C is greatest' );END IF;END IF;dbms_output.put_line(‘Program completed.’ );END;/

Spiegazione del codice:

  • Riga codice 2: dichiarazione della variabile "a" come tipo di dati "NUMERO" e inizializzazione con valore "10".
  • Riga codice 3: dichiarazione della variabile "b" come tipo di dati "NUMERO" e inizializzazione con valore "15".
  • Riga di codice 4: dichiarazione della variabile "c" come tipo di dati "NUMERO" e inizializzazione con valore "20".
  • Riga di codice 6: stampa dell'istruzione "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" verificherà 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 massimo" (riga 13).
  • Riga di codice 18: nel caso in cui la condizione1 restituisca false, la condizione in "nidificato-se 2" verificherà se "b" è maggiore di "c" (riga 18).
  • Riga di codice 21: se "b" è maggiore di "c", verrà stampato il messaggio "B è maggiore" (riga 19), altrimenti se la condizione2 fallisce, verrà stampato "C è maggiore" (riga 21).
  • Riga di codice 24: stampa dell'istruzione "Programma completato" (riga 24).

Emissione del codice:

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

Sommario

In questo capitolo abbiamo imparato le diverse dichiarazioni decisionali e la loro sintassi ed esempi. La tabella seguente fornisce il riepilogo delle varie affermazioni condizionali che abbiamo discusso.

GENERE

DESCRIZIONE

UTILIZZO

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-ALLORA-ALTRIMENTI

Verifica la presenza di una condizione booleana, se verrà eseguito il codice TRUE nel blocco "THEN", se verrà eseguito il codice falso nel blocco "ELSE".

Più appropriato nella condizione "QUESTO O QUELLO".

SE-ALLORA-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 è TRUE, viene eseguito il codice nel blocco "ELSE".

Utilizzato principalmente per scegliere tra più di due alternative.

NESTED-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 annidate.