sql >> Base de Datos >  >> RDS >> Oracle

Diferencias de Oracle entre NVL y Coalesce

COALESCE es una función más moderna que forma parte de ANSI-92 estándar.

NVL es Oracle específico, se introdujo en 80 's antes de que hubiera estándares.

En caso de dos valores, son sinónimos.

Sin embargo, se implementan de manera diferente.

NVL siempre evalúa ambos argumentos, mientras que COALESCE por lo general, detiene la evaluación cada vez que encuentra el primer no NULL (hay algunas excepciones, como la secuencia NEXTVAL ):

SELECT  SUM(val)
FROM    (
        SELECT  NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Esto se ejecuta durante casi 0.5 segundos, ya que genera SYS_GUID() 's, a pesar de 1 no siendo un NULL .

SELECT  SUM(val)
FROM    (
        SELECT  COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
        FROM    dual
        CONNECT BY
                level <= 10000
        )

Esto entiende que 1 no es un NULL y no evalúa el segundo argumento.

SYS_GUID no se generan y la consulta es instantánea.