Finora tutti i comandi che abbiamo visto venivano eseguiti in rigida sequenza.
Adesso, vedremo alcuni costrutti che ci permetteranno di svincolarci da questo "percorso obbligato" e ci consentiranno di eseguire delle istruzioni piuttosto di altre a seconda dei valori assunti da alcune condizioni. Questi costrutti (detti costrutti condizionali) vengono, quindi, utilizzati per controllare il flusso di elaborazione della nostra sequenza di istruzioni indirizzandolo in un modo, piuttosto che in un altro, a seconda del verificarsi o meno di certe condizioni.
Il piรน semplice e piรน intuitivo, anche per chi ha una piccola esperienza di programmazione, รจ il costrutto IF. Esso si compone delle seguenti parole chiave: If, Then, Else/Elsif, End If. La forma piรน semplice in cui lo si andrร ad utilizzare รจ:
IF condizione
THEN
Istruzione;
END IF;
Vediamo di comprendere il signficato del codice proposto. In sostanza, se la condizione รจ verificata (TRUE) viene eseguita lโistruzione (o il blocco di istruzioni) che si trovano tra la clausola THEN e la clausola END IF. Leggermente piรน complessa รจ la forma del tipo:
IF condizione
THEN
Istruzione;
ELSE
Istruzione;
END IF;
Rispetto al primo esempio, vediamo che si รจ aggiunta una nuova clausola: ELSE. In sostanza avremo che, se la condizione รจ verificata (TRUE) viene eseguita lโistruzione (blocco di istruzioni) che si trovano dopo la clausola THEN, altrimenti, se la condizione non si verifica (FALSE) oppure รจ NULL, viene eseguita lโistruzione (blocco di istruzioni) che si trovano dopo la clausola ELSE. In tutti i casi, il flusso riprende normalmente al primo comando successivo alla clausola END IF. Di seguito, un piccolo esempio:
DECLARE
var_nome VARCHAR2;
BEGIN
SELECT Nome INTO var_nome FROM Anagrafica WHERE Cognome = 'Rossi';
IF var_nome = 'Mario'
THEN
INSERT INTO Log (Messaggio) VALUES ('Il nome del Signor Rossi รจ Mario');
ELSE
INSERT INTO Log (Messaggio) VALUES ('Il nome del Signor Rossi NON รจ Mario');
END IF;
END;
Vediamo ora una versione maggiormente articolata che sfrutta anche la clausola ELSIF:
IF condizione1 THEN
istruzione1;
ELSIF condizione2 THEN
istruzione2;
ELSIF condizione3 THEN
istruzione3;
ELSIF condizione4 THEN
istruzione4;
END IF;
Il significato di questo codice e facilmente intuibile sulla base di quanto detto sinโora: se si verifica la condizione1 viene eseguita lโistruzione1, se si verifica la condizione2 viene eseguita lโistruzione2, ecc. Sulla stessa falsariga di quanto appena visto รจ il costrutto CASE. La sintassi รจ del tipo:
CASE variabile
WHEN condizione1 THEN
Istruzione1;
WHEN condizione2 THEN
Istruzione2;
WHEN condizione3 THEN
Istruzione 3;
END CASE;
Sebbene possa sembrare alquanto differente, in sostanza esso non fa che prendere in esame una variabile su cui poi valuta le condizioni. Verrร eseguita lโistruzione (il blocco di istruzioni) che si trova dopo la condizione che risulta verificata.