Oracle
 sql >> Database >  >> RDS >> Oracle

Differenze Oracle tra NVL e Coalesce

COALESCE è una funzione più moderna che fa parte di ANSI-92 standard.

NVL è Oracle specifico, è stato introdotto in 80 prima che esistessero degli standard.

In caso di due valori, sono sinonimi.

Tuttavia, sono implementati in modo diverso.

NVL valuta sempre entrambi gli argomenti, mentre COALESCE di solito interrompe la valutazione ogni volta che trova il primo non NULL (ci sono alcune eccezioni, come la sequenza NEXTVAL ):

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

Funziona per quasi 0.5 secondi, poiché genera SYS_GUID() 's, nonostante 1 non essendo un NULL .

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

Questo comprende che 1 non è un NULL e non valuta il secondo argomento.

SYS_GUID non vengono generati e la query è istantanea.