有谁知道,为什么 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.