我在下面这个函数中定义了一个返回值,按照下面的执行后。函数的返回值是null。问题是我不想让这个返回值是null,可不可以在它为null 的情况下给一个默认的值。CREATE OR REPLACE FUNCTION tmp_sel(v_na in int)        
   RETURN number        
as        
     var_tmp number default 20;
BEGIN         
    
    select 100 into var_tmp from dual where 1>2;
        
    return  var_tmp; 
END;    select tmp_sel(12) aa from dual;

解决方案 »

  1.   

    加个
    return前加个
    if var_tmp is null then var_tmp:=0; end if;
    不就好了
      

  2.   

    select 100 into var_tmp from dual where 1>2;
    这个根本不可能有值return nvl(var_tmp, 20);
      

  3.   

    CREATE OR REPLACE FUNCTION tmp_sel(v_na in int)        
      RETURN number        
    as        
        var_tmp number default 20; 
    BEGIN        
        
        select 100 into var_tmp from dual where 1>2; 
            
        return  NVL(var_tmp,'默认值'); 
    END;
      

  4.   

    1楼和2楼的方法我试过了,但是还是null值,很郁闷。CREATE OR REPLACE FUNCTION tmp_sel(v_na in int)        
      RETURN number        
    as        
        var_tmp number default 20; 
    BEGIN        
        
        select 100 into var_tmp from dual where 1>2;     if var_tmp is null then var_tmp:=110; end if; 
        
        --  return  nvl(var_tmp,300);     return var_tmp;
    END;  select tmp_sel(12) aa from dual;
      

  5.   

    select 100 into var_tmp from dual where 1>2; 
    这句话,var_tmp 变量就算没有成功赋值。那var_tmp 应该是默认值,怎么会是null值?
      

  6.   

    CREATE OR REPLACE FUNCTION tmp_sel(v_na in int)        
      RETURN number        
    as        
        var_tmp number default 20; 
    BEGIN        
        
        select 100 into var_tmp from dual where 1>2;     if var_tmp is null then var_tmp:=110; end if;     return var_tmp; 
    EXCEPTION
       WHEN OTHERS THEN
          return 0;
    END; 是因为这个函数抛no data found异常了没捕获。
      

  7.   

    select没有查到数据就会出现no data found 的异常
      

  8.   

    no data found 异常,加个异常捕获,下面的可以解决这个问题:CREATE OR REPLACE FUNCTION tmp_sel(v_na IN INT) RETURN NUMBER AS
    var_tmp NUMBER := 20;
    BEGIN SELECT 100 INTO var_tmp FROM dual WHERE 1 > 2; IF var_tmp IS NULL THEN
    var_tmp := 20;
    END IF;
    RETURN nvl(var_tmp, 20);EXCEPTION
    WHEN no_data_found THEN
    RETURN nvl(var_tmp, 20);

    END;
      

  9.   

    8楼正解!要捕获异常,并处理。return nvl(v_tem,20);即可
      

  10.   

     select 100 into var_tmp from dual where 1 >2; 这句怎么老是报找不到数据源.是不是不能这么用万能表阿,请楼主换个表达方式试一下.
      

  11.   

    对这里是有异常的,执行是不成功的。没有结果的into到变量是有notfound的问题的。