• La funzione NULLIF in Oracle

    La funzione Oracle NULLIF mette a confronto due termini per verificare se sono uguali.

    Le funzioni generali

    In un precedente articolo dal titolo Le funzioni in Oracle su questo blog, abbiamo introdotto il concetto di funzione, effettuato una distinzione tra funzioni che agiscono su una sola riga e funzioni che agiscono su più righe, e visto le diverse tipologie di funzioni che agiscono su una sola riga: funzioni di stringa, numeriche, di data, di conversione e generali.

    Le funzioni generali a loro volta possono essere suddivise tra:

    • quelle che semplificano il lavoro con colonne che potenzialmente contengono valori nulli;
    • quelle che applicano una logica condizionale e restituiscono valori diversi sulla base di valutazioni di condizioni di confronto.

    oracle-funzioni-generali

    Tra le funzioni generali per la gestione dei valori nulli ci sono le seguenti:

    • NVL: fornisce un valore alternativo da utilizzare se si incontra un valore nullo;
    • NVL2: esegue una valutazione condizionale del primo parametro e restituisce un valore se si incontra un valore null e un’alternativa se il parametro non è nullo;
    • NULLIF: confronta due termini e restituisce un risultato nullo se sono uguali;
    • COALESCE: accetta un numero illimitato di parametri e restituisce il primo parametro non nullo altrimenti restituisce null

    Tra le funzioni generali per la gestione condizionale ci sono le funzioni CASE e DECODE.

    In questo articolo esamineremo in dettaglio la funzione NULLIF.

    La funzione NULLIF

    La funzione NULLIF testa due termini per verificare se sono uguali. Se sono uguali la funzione restituisce un valore null, altrimenti restituisce il primo dei due termini testati. La funzione NULLIF prende in input due parametri obbligatori di qualsiasi tipo di dati. 

    sintassi-nullif-oracle

    La sua sintassi è:

    dove i parametri expr1 ed expr2 sono i termini che vengono confrontati. Se sono identici, viene restituito NULL. Se essi sono diversi, viene restituito il parametro expr1. Non è possibile inserire il letterale NULL per il parametro expr1.

    Se entrambi gli argomenti sono di tipo numerico, Oracle determina quale argomento ha la precedenza più elevata e converte in modo implicito l’altro argomento a quel tipo di dati, restituendolo. Se gli argomenti non sono di tipo numerico, devono essere dello stesso tipo, altrimenti Oracle restituisce un errore.

    La funzione NULLIF è equivalente alla seguente espressione CASE:

    Considera la seguente query:

    Questa query restituisce NULL perché i due parametri in input sono identici.

    Considera invece la seguente query:

    In questo caso, i parametri in input sono 1234 e un’espressione che restituisce 124. La funzione NULLIF trova 1234, che è diverso da 123 + 1, quindi restituisce il parametro expr1, che è 1234.

    Considera la query:

    I letterali carattere nella query non vengono implicitamente convertiti in elementi di tipo DATE e vengono confrontati come due stringhe di caratteri. Dal momento che le stringhe sono diverse, viene restituito il parametro expr1 24-FEB-2018.

    Un altro esempio:

    La query seleziona gli impiegati che hanno cambiato mansione da quando sono stati impiegati (tabella JOB_HISTORY e job_id differente dal job_id corrente nella tabella EMPLOYEES).
    esempio-nullif

    Un ultimo esempio:

    La query mostra come NULLIF viene annidata come parametro alla funzione NVL2. La funzione NULLIF utilizza le funzioni SUBSTR e UPPER incorporate nell’espressione usata come parametro expr1. La colonna EMAIL viene confrontata con un’espressione, formata concatenando il primo carattere di FIRST_NAME con l’equivalente maiuscolo della colonna LAST_NAME, per i dipendenti il cui cognome inizia per B. Quando questi termini sono uguali (cioè l’espressione concatenata e l’indirizzo email), NULLIF restituisce null, altrimenti restituisce il parametro expr1. Questo è utilizzato come parametro di NVL2. La funzione NVL2 fornisce righe di testo descrittive per testare se un elemento corrispondente al modello oppure no.

    esempio-nullif-oracle

     

    Ad esempio, per il primo record:

    1. viene valutata SUBSTR(‘Hermann’,1,1)||UPPER(‘Baer’) = HBAER
    2. viene valutato NULLIF(‘HBAER’,’HBAER’) = NULL perché expr1 = expr2
    3. viene valutato NVL2(espressione null, ‘KO’,’OK’) e poiché expr1 è NULL, viene restituito OK.

    Invece, per il record David Bernstein:

    1. viene valutata SUBSTR(‘David’,1,1)||UPPER(‘Bernstein’) = HBAER
    2. viene valutato NULLIF(‘DBERNSTEIN’,’DBERNST’) =DBERNSTEIN perché expr1 <> expr2
    3. viene valutato NVL2(‘DBERNSTEIN’, ‘KO’,’OK’) e poiché expr1 è diverso da NULL, viene restituito KO.

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">