Questo tutorial SQL fornisce spiegazioni ed esempi per la funzione NULLIF in Oracle
La funzione NULLIF è una funzione molto utile. Confronta due valori e restituisce null se i valori sono gli stessi, altrimenti restituisce il primo valore
espr1 :sono i valori di origine o l'espressione che verrà confrontata con expr2
expr2 :è anche il valore sorgente che viene confrontato con expr1
Non è possibile specificare il valore NULL letterale per il primo valore
SQL> select nullif(NULL,1) from dual;
select nullif(NULL,1) from dual
*
ERROR at line 1:
ORA-00932:inconsistent datatypes:previsto - ottenuto CHAR
Utilizzo ed esempio
SQL> seleziona nullif(1,1) da dual;NULLIF(1,1)
-----------SQL> seleziona nullif(1,2) da dual;NULLIF( 1,2)
-----------
1
Nota importante
1)Questa istruzione è molto simile alla dichiarazione case ed è equivalente a
CASE WHEN expr1=expr2 THEN NULL ELSE expr1 END
2) Se entrambi gli argomenti sono tipi di dati numerici, Oracle Database determina l'argomento con la precedenza numerica più alta, converte implicitamente l'altro argomento in quel tipo di dati e restituisce quel tipo di dati. Se gli argomenti non sono numerici, devono essere dello stesso tipo di dati Oracle, altrimenti Oracle restituisce un errore.
SQL> select nullif(1,'apple') from dual;
select nullif(1,'apple') from dual
*
ERROR at line 1:
ORA-00932 :tipi di dati incoerenti:NUMBER previsto ha ottenuto CHAR
SQL> select nullif('apple',1) from dual;
select nullif('apple',1) from dual
*
ERROR at line 1:
ORA-00932 :tipi di dati incoerenti:previsto CHAR ottenuto NUMBER
Altri esempi
seleziona nome, lunghezza(nome),cognome,lunghezza(cognome), nullif(lunghezza(nome),lunghezza(cognome)) da emp;SELECT NULLIF('domenica', 'venerdì') AS check FROM dual;
Un altro caso d'uso della funzione NULLIF sarà se si desidera elencare i dipendenti che hanno cambiato lavoro da quando sono stati assunti, come indicato da un job_id nella tabella job_history diverso dall'attuale job_id nella tabella dipendenti
select emp_name,nullif(b.job_id,a.job_id) old_job dai dipendenti a, job_history b dove a.emp_id=b.emp_id;
Domande frequenti sulla funzione Nullif
Come evitare errori di divisione per zero con l'aiuto della funzione NULLIF
Otteniamo l'errore di divisione per zero se il denominatore nella divisione è zero. Possiamo evitare usando la funzione NULLIF come di seguito
select 100/ nullif(0,0) from dual;
Ora qui poiché entrambi i valori sono uguali, Nullif restituirà null e l'intera espressione restituirà invece null di qualsiasi errore. Ecco come puoi usarlo quando hai a che fare con una colonna reale
select col2/ nullif(col1,0) from exp;
Articoli correlati
Istruzione di aggiornamento in Oracle
Funzione NVL2 in Oracle
Funzione NVL in Oracle
Funzione Coalesce in Oracle
Funzioni a riga singola in sql
Istruzione Elimina dalla tabella in Oracle
Risorsa esterna
Riferimento Oracle per NULLIF