COALESCE adalah fungsi yang lebih modern yang merupakan bagian dari ANSI-92 standar.
NVL adalah Oracle spesifik, itu diperkenalkan di 80 's sebelum ada standar apapun.
Dalam hal dua nilai, keduanya adalah sinonim.
Namun, penerapannya berbeda.
NVL selalu mengevaluasi kedua argumen, sementara COALESCE biasanya menghentikan evaluasi setiap kali menemukan non-NULL first pertama (ada beberapa pengecualian, seperti urutan NEXTVAL ):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Ini berjalan hampir 0.5 detik, karena menghasilkan SYS_GUID() 's, meskipun 1 bukan NULL .
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
Ini memahami bahwa 1 bukan NULL dan tidak mengevaluasi argumen kedua.
SYS_GUID 's tidak dibuat dan kuerinya instan.