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.