back to top

Strutture condizionali in PL/SQL – Guida Oracle

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.

PubblicitÃ