为什么NVL总是评估第二个参数 [英] Why does NVL always evaluate 2nd parameter

查看:121
本文介绍了为什么NVL总是评估第二个参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人知道吗,即使第一个参数不是NULL,为什么Oracle的NVL(和NVL2)函数总是对第二个参数求值?

Does anyone know, why Oracle's NVL (and NVL2) function always evaluate the second parameter, even if the first parameter is not NULL?

简单测试:

CREATE FUNCTION nvl_test RETURN NUMBER AS
BEGIN
  dbms_output.put_line('Called');
  RETURN 1;
END nvl_test;

SELECT NVL( 0, nvl_test ) FROM dual

返回0,但也打印Called.

nvl_test.

推荐答案

一直都是这样,因此Oracle必须保持这种方式以保持向后兼容.

It's always been that way, so Oracle has to keep it that way to remain backwards compatible.

使用COALESCE代替以获得短路行为.

Use COALESCE instead to get the short-circuit behaviour.

这篇关于为什么NVL总是评估第二个参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆