COALESCE
est une fonction plus moderne qui fait partie de ANSI-92
standard.
NVL
es Oracle
spécifique, il a été introduit en 80
avant qu'il n'y ait des normes.
Dans le cas de deux valeurs, elles sont synonymes.
Cependant, ils sont mis en œuvre différemment.
NVL
évalue toujours les deux arguments, tandis que COALESCE
arrête l'évaluation dès qu'il trouve le premier non NULL
:
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Cela fonctionne pendant presque 0.5
secondes, puisqu'il génère SYS_GUID()
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.