Does anyone know, why Oracle's NVL
(and NVL2
) function always evaluate the second parameter, even if the first parameter is not NULL
?
Simple 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
returns 0
, but also prints Called
.
nvl_test
has been called, even though the result is ignored since first parameter is not NULL
.
It's always been that way, so Oracle has to keep it that way to remain backwards compatible.
Use COALESCE
instead to get the short-circuit behaviour.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With