为什么NVL总是评估第二个参数 [英] Why does NVL always evaluate 2nd parameter
本文介绍了为什么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屋!
查看全文