Weiß jemand, warum Oracle NVL
(und NVL2
) -Funktion immer den zweiten Parameter auswerten, auch wenn der erste Parameter nicht NULL
ist?Warum NVL immer 2. Parameter auswerten
Einfacher 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
kehrt 0
, sondern druckt auch Called
.
nvl_test
wurde aufgerufen, obwohl das Ergebnis ignoriert wird, da der erste Parameter nicht NULL
ist.
Vorbehalt: Es schließt nicht in 9i. –