oracle nvl,nvl2,存储函数无法正常工作

时间:2017-03-02 11:24:00

标签: oracle nvl

使用存储功能调用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位生产

0 个答案:

没有答案