COALESCE est une fonction plus moderne qui fait partie de ANSI-92 norme.
NVL est Oracle spécifique, il a été introduit en 80 's avant qu'il n'y ait de normes.
En cas de deux valeurs, elles sont synonymes.
Cependant, ils sont implémentés différemment.
NVL évalue toujours les deux arguments, tandis que COALESCE arrête généralement l'évaluation chaque fois qu'il trouve le premier non-NULL (il y a quelques exceptions, comme la séquence NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Cela dure presque 0.5 secondes, puisqu'il génère SYS_GUID() 's, malgré 1 n'étant pas un NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Ceci comprend que 1 n'est pas un NULL et n'évalue pas le second argument.
SYS_GUID ne sont pas générés et la requête est instantanée.