Czy ktoś wie, dlaczego funkcja Oracle NVL
(i NVL2
) zawsze ocenia drugi parametr, nawet jeśli pierwszy parametr nie jest NULL
?Dlaczego NVL zawsze ocenia drugi parametr?
prosty test:
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
powraca 0
, ale drukuje również Called
. Zostało wywołane
nvl_test
, mimo że wynik jest ignorowany, ponieważ pierwszym parametrem nie jest NULL
.
Zastrzeżenie: nie powoduje zwarcia w 9i. –