Có ai biết, tại sao hàm NVL
(và NVL2
) của Oracle luôn đánh giá tham số thứ hai, ngay cả khi tham số đầu tiên không phải là NULL
?Tại sao NVL luôn đánh giá tham số thứ 2
đơn giản kiểm tra:
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
lợi nhuận 0
, mà còn in Called
.
nvl_test
đã được gọi, mặc dù kết quả bị bỏ qua vì tham số đầu tiên không phải là NULL
.
Lưu ý: không ngắn mạch trong 9i. –