COALESCE
è una funzione più moderna che fa parte di ANSI-92
standard.
NVL
è Oracle
specifico, è stato introdotto in 80
prima che esistessero degli standard.
In caso di due valori, sono sinonimi.
Tuttavia, sono implementati in modo diverso.
NVL
valuta sempre entrambi gli argomenti, mentre COALESCE
di solito interrompe la valutazione ogni volta che trova il primo non NULL
(ci sono alcune eccezioni, come la sequenza NEXTVAL
):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Funziona per quasi 0.5
secondi, poiché genera SYS_GUID()
's, nonostante 1
non essendo un NULL
.
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Questo comprende che 1
non è un NULL
e non valuta il secondo argomento.
SYS_GUID
non vengono generati e la query è istantanea.