Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Diferenças da Oracle entre NVL e Coalesce


COALESCE é uma função mais moderna que faz parte do ANSI-92 padrão.

NVL é Oracle específico, foi introduzido em 80 antes de haver quaisquer padrões.

No caso de dois valores, eles são sinônimos.

No entanto, eles são implementados de forma diferente.

NVL sempre avalia ambos os argumentos, enquanto COALESCE geralmente interrompe a avaliação sempre que encontra o primeiro não-NULL (há algumas exceções, como a sequência NEXTVAL ):
SELECT  SUM(val)
FROM    (
        SELECT  NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Isso é executado por quase 0.5 segundos, pois gera SYS_GUID() 's, apesar de 1 não sendo um NULL .
SELECT  SUM(val)
FROM    (
        SELECT  COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Isso entende que 1 não é um NULL e não avalia o segundo argumento.

SYS_GUID 's não são gerados e a consulta é instantânea.