v_date:= to_date('0000-00-00','yyyy-mm-dd');  
这个就是错误的,它会引起异常:ORA-01843: not a valid month
可以改为 v_date:= to_date('1900-01-01','yyyy-mm-dd');  

解决方案 »

  1.   

    TO: ALL 
      我按照上面的方法对函数进行了修改,但问题的实质没有解决?
      v_date:= to_date('1900-01-01','yyyy-mm-dd') is right.
      我问题的关键是函数执行错误(字符型转换日期型出错)应该执行异常,但是没有执行?
      

  2.   

    没问题呀?SQL> create or replace function f_validdate(a_default_value string,a_data_value string) return date 
    is
      2    v_date date;
      3  begin
      4  --if a_data_value is null to confirm the default if right  
      5    if a_data_value is null then
      6       v_date:=to_date(a_default_value,'yyyy-mm-dd');
      7    else
      8       v_date:=to_date(a_data_value,'yyyy-mm-dd');
      9    end if;
     10    exception
     11    when others then
     12    v_date:= to_date('1900-01-01','yyyy-mm-dd');  
     13    return v_date;
     14  end f_validdate;
     15  /函数已创建。SQL> select f_validdate('dsfhsdf',NULL) from dual;F_VALIDDAT
    ----------
    01-1月 -00
      

  3.   

    To Lastdrop
    Hello! thank you !
    你是正确的,但你只测试了一种情况,这种情况是没有错的,如果用另一种情况将会出错。
    例如:Select f_validdate('dsfhsdf','sdfdsf') From dual;但我现在己经查出了原因,因为在异常之前没有返回值,所以就应该在
    Exception  前面加上返回值: Return v_date 即可!你可以试试!