Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Unterschiede zwischen NVL und Coalesce

COALESCE ist eine modernere Funktion, die Teil von ANSI-92 ist Standard.

NVL ist Oracle Insbesondere wurde es in 80 eingeführt bevor es Standards gab.

Bei zwei Werten handelt es sich um Synonyme.

Sie werden jedoch unterschiedlich implementiert.

NVL wertet immer beide Argumente aus, während COALESCE normalerweise stoppt die Auswertung immer dann, wenn es den ersten Nicht-NULL findet (Es gibt einige Ausnahmen, wie z. B. die Sequenz NEXTVAL ):

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

Dies läuft für fast 0.5 Sekunden, da es SYS_GUID() generiert 's, trotz 1 kein NULL sein .

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

Dies versteht, dass 1 ist kein NULL und wertet das zweite Argument nicht aus.

SYS_GUID 's werden nicht generiert und die Abfrage erfolgt sofort.