COALESCE是更现代的功能,是
ANSI-92标准的一部分。
NVL是
Oracle特定的,它
80在没有任何标准之前于引入。
在两个值的情况下,它们是同义词。
但是,它们的实现方式有所不同。
NVL总是对两个参数求值,而
COALESCE通常在找到第一个非参数时就停止求值
NULL(有一些例外,例如sequence
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不会生成,查询是即时的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)