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.