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');
这个就是错误的,它会引起异常:ORA-01843: not a valid month
可以改为 v_date:= to_date('1900-01-01','yyyy-mm-dd');
解决方案 »
- imp命令导入dmp文件,提示IMP-00003:ORA-23404:ORA-06512:IMP-00017: ORA-00001: 等错误
- 如何获取指定时间范围内的天数呢?
- Oracle 问题急 哪位求助大侠
- PL/SQL Developer字符集问题 请教
- 数据库合并的问题
- 请教ORACLE存储过程执行完成sqlcode值为100是什么情况?是执行过程有错误吗?谢谢
- 关于Oracle中的时间计算问题!
- 请教单机状态下,oracle9i的安装注意事项
- pl/sql 问题
- 新手问题,一个关于db link的连接问题
- 高手指教-oracle client
- 很急!Linux下安装好Oracle8.1.7后无法启动
我按照上面的方法对函数进行了修改,但问题的实质没有解决?
v_date:= to_date('1900-01-01','yyyy-mm-dd') is right.
我问题的关键是函数执行错误(字符型转换日期型出错)应该执行异常,但是没有执行?
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
Hello! thank you !
你是正确的,但你只测试了一种情况,这种情况是没有错的,如果用另一种情况将会出错。
例如:Select f_validdate('dsfhsdf','sdfdsf') From dual;但我现在己经查出了原因,因为在异常之前没有返回值,所以就应该在
Exception 前面加上返回值: Return v_date 即可!你可以试试!