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.