当存储过程引发异常时,可以使用以下代码获取异常并将异常更新到特定字段,这在检查数据时方便检查数据抛出异常.
WHEN OTHERS THEN
--ROLLBACK;
--获取异常信息
V_ERRCODE:= SQLCODE ;
V_ERRMSG:= SUBSTR(SQLERRM , 1, 150);
--同步存储过程出现错误 2 -- 同步失败
UPDATE PRPDRATIONCLAUSEKINDTEMP
SET STATUS = '2',ERRMSG = V_ERRMSG,ERRCODE = V_ERRCODE
WHERE RATIONCODE = CCIC_RATION_DETAIL.RATIONCODE
AND CLAUSECODE = CCIC_RATION_DETAIL.CLAUSECODE
AND KINDCODE = CCIC_RATION_DETAIL.KINDCODE;
COMMIT;
ORACLE存储过程中的常见异常
报价
异常oracle错误sqlcode值条件
no_data_found ora-01403 +100 select into语句不返回符合条件的记录
too_many_rows ora-01422 -1422 select into语句具有多个满足返回条件的记录
dup_val_on_index ora-00001 -1对于表中的一列,该列已被限制为唯一索引,程序尝试存储两个重复的值
value_error ora-06502 -6502转换字符类型,拦截或长度限制时,会发生此异常. 例如,如果将一个字符分配给变量oracle 过程 异常处理,并且变量声明的长度比该字符短,则将引发此异常.
storage_error ora-06500 -6500内存溢出
zero_divide ora-01476 -1476除数为零
case_not_found ora-06592 -6530对于select case语句,没有匹配条件,并且同时没有else语句可以捕获其他条件
cursor_already_open ora-06511 -6511该程序试图打开一个已经打开的游标
timeout_on_resource ora-00051 -51系统正在等待资源oracle 过程 异常处理,时间已结束
今天同步数据时丢了
ORA-04062: timestamp of procedure "CCICINS.P_DODUMP_CCICINS" has been changed
错误原因: 当两个存储过程相互调用时,一个被调用的存储过程碰巧只是被编译了,但是调用者的存储过程尚未被编译. 此时的数据将引发此异常.
解决方案: 重新编译调用方的存储过程,然后重新同步数据以解决该问题.
引发异常的三种方法:
引发异常的三种方法
1、通过PL/SQL运行时引擎
2、使用RAISE语句
3、调用RAISE_APPLICATION_ERROR存储过程
//抛出异常方式讲解
1、当或PL/SQL在运行时发生错误时,一个异常被PL/SQL运行时引擎自动抛出。
2、异常也可以通过RAISE语句抛出,如:RAISE exception_name;
3、RAISE_APPLICATION_ERROR内建函数用于抛出一个异常并给异常赋予一个错误号以及错误信息
(自定义异常的缺省错误号是+1,缺省信息是User_Defined_Exception)
个人感觉前两个经常会用到,第三个好像不太常用。
某些内容来自:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-168997-1.html