使用存储功能调用NVL和NVL2功能。即使不从该函数返回值,也会调用函数。请参阅以下示例。
create or replace
function f1
return varchar2
is
begin
---set serveroutput on
dbms_output.put_line('Call to F1');
return 1;
end;
set serveroutput on
select NVL2(null,f1,100) from dual
NVL2(NULL,F1,100)
--------------------------------------------------------------------------------
100
Call to F1
select nvl('x',f1) from dual
NVL('X',F1)
--------------------------------------------------------------------------------
x
Call to F1
因此,虽然从NVL和NVL2函数返回了正确的值,但也调用了函数。
此逻辑在许多地方使用,导致对函数的额外调用,从而导致性能下降。任何帮助表示赞赏。
Oracle版本是Oracle Database 11g企业版版本11.2.0.4.0 - 64位生产