Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle Différences entre NVL et Coalesce

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.