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.