有谁知道,为什么 Oracle 的NVL
(and 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
.