小编典典

为什么NVL总是评估第二个参数

sql

有谁知道,为什么Oracle的NVL(和NVL2)函数总是对第二个参数求值,即使第一个参数不是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已调用,即使由于第一个参数不是,结果也被忽略了NULL


阅读 177

收藏
2021-05-05

共1个答案

小编典典

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

使用COALESCE,而不是让短路行为。

2021-05-05