• funzione-NVL-Oracle

    La funzione NVL in Oracle

    La funzione Oracle NVL fornisce un valore alternativo da utilizzare se si incontra un valore nullo.

    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 NVL.

     

    La funzione NVL

    La funzione NVL valuta se una colonna o un’espressione di qualsiasi tipo di dati è null o no. Se il termine è null, viene restituito un valore alternativo non nullo; altrimenti, viene restituito il parametro iniziale.

    La funzione NVL prende in input due parametri obbligatori.

    sintassi-nvl-oracle

    La sua sintassi è:

    dove expr1 rappresenta il termine da testare e expr2 è il risultato restituito se il termine expr1 è null. I tipi di dati dei parametri expr1 e expr2 devono sempre essere compatibili: devono essere cioè dello stesso tipo, oppure deve essere possibile convertire implicitamente expr2 al tipo del parametro expr1.

    La funzione NVL restituisce un valore con lo stesso tipo di dati del parametro expr1. Considera la seguente query:

    Poiché la funzione NVL prende in input due parametri obbligatori, la query restituisce l’errore “ORA-00909: invalid number of arguments”.

    Considera invece la seguente query:

    che restituisce 1234 poiché il primo parametro è NULL.

    Considera la query:

    Questa query usa la funzione SUBSTR, che tenta di estrarre il quarto carattere da una stringa di 3 caratteri. La funzione restituisce null, e quindi è come avere NVL (null, ‘No substring exists’), che quindi restituisce la stringa ‘No substring exists’.

    Un altro esempio:

    La query restituisce la lista degli impiegati (cognome e commissione), sostituendo “Not Applicable” se l’impiegato non ha una commissione.

    esempio-nvl

     

    La funzione NVL può essere utile per evitare di avere un risultato NULL in un’espressione numerica. Se infatti all’interno di un’espressione numerica (a differenza di quanto avviene per un’espressione che gestisce caratteri) uno dei termini è NULL, il risultato dell’espressione sarà NULL. Ad esempio, in questa query, l’espressione commission_pct*salary restituisce NULL se commission_pct è NULL:

    esempio-nvl-oracle2

    Quest’ultima query, che fa uso della funzione NVL,  restituisce sempre elementi numerici.

    esempio-nvl-oracle

     

     

     

    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="">