Кто-нибудь знает, почему функция Oracle NVL
(и NVL2
) всегда оценивает второй параметр, даже если первый параметр не равен NULL
?Почему NVL всегда оценивает второй параметр
Простой тест:
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
.
Предостережение: оно не замыкается в 9i. –