admin 管理员组

文章数量: 888297

oracle function exception,ORACLE

ORACLE--Function异常处理(EXCEPTION)

存储过程在抛出异常的时候可以通过下面的代码,去获取异常并把异常UPDATE到某个字段内,方便在检查数据时,查看数据抛出的异常。

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存储过程常见异常

引用

exception  oracle error  sqlcode value  condition

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  在转换字符类型,截取或长度受限时,会发生该异常,如一个字符分配给一个变量,而该变量声明的长度比该字符短,就会引发该异常

storage_error  ora-06500  -6500  内存溢出

zero_divide  ora-01476  -1476  除数为零

case_not_found  ora-06592  -6530  对于选择case语句,没有与之相匹配的条件,同时,也没有else语句捕获其他的条件

cursor_already_open  ora-06511  -6511  程序试图打开一个已经打开的游标

timeout_on_resource  ora-00051  -51  系统在等待某一资源,时间超时今天在同步数据时抛出

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)

个人感觉前两个经常会用到,第三个好像不太常用。

部分内容来自:

本文标签: oracle function exception Oracle