为了账号安全,请及时绑定邮箱和手机立即绑定

NVL与Coalesce之间的Oracle差异

NVL与Coalesce之间的Oracle差异

开满天机 2019-08-01 14:31:33
NVL与Coalesce之间的Oracle差异Oracle中的NVL和Coalesce之间是否存在明显差异?明显的区别在于coalesce将返回其参数列表中的第一个非null项,而nvl仅接受两个参数,如果不为null则返回第一个,否则返回第二个。似乎NVL可能只是一个'基础案例'版本的合并。我错过了什么吗?
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

COALESCE是更现代的功能,是ANSI-92标准的一部分。

NVLOracle具体的,它在推出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没有生成,查询是即时的。


查看完整回答
反对 回复 2019-08-01
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

NVL将隐式转换为第一个参数的数据类型,因此以下内容不会出错

select nvl('a',sysdate) from dual;

COALESCE期望一致的数据类型。

select coalesce('a',sysdate) from dual;

会抛出'不一致的数据类型错误'


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 1221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信