慕码人8056858
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。SELECT SUM(val)FROM (
SELECT COALESCE(1, LENGTH(RAWTOHEX(SYS_GUID()))) AS val FROM dual CONNECT BY
level <= 10000
)这理解1不是NULL并且不评估第二个参数。SYS_GUID没有生成,查询是即时的。