COALESCE
अधिक आधुनिक कार्य है जो ANSI-92
. का एक हिस्सा है मानक।
NVL
Oracle
है विशिष्ट, इसे 80
. में पेश किया गया था इससे पहले कोई मानक थे।
दो मानों के मामले में, वे पर्यायवाची हैं।
हालांकि, उन्हें अलग तरह से लागू किया जाता है।
NVL
हमेशा दोनों तर्कों का मूल्यांकन करता है, जबकि COALESCE
जब भी यह पहला गैर-NULL
मिलता है तो आमतौर पर मूल्यांकन बंद कर देता है (कुछ अपवाद हैं, जैसे अनुक्रम NEXTVAL
):
SELECT SUM(val)
FROM (
SELECT NVL(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
यह लगभग 0.5
. के लिए चलता है सेकंड, क्योंकि यह SYS_GUID()
. उत्पन्न करता है 1
. के बावजूद NULL
not नहीं होना ।
SELECT SUM(val)
FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val
FROM dual
CONNECT BY
level <= 10000
)
यह समझता है कि 1
NULL
नहीं है और दूसरे तर्क का मूल्यांकन नहीं करता है।
SYS_GUID
उत्पन्न नहीं होते हैं और क्वेरी तत्काल होती है।