oracle如何获取异常,ORACLE-函数异常处理(EXCEPTION)

916653b2330578f8cadfddee5c9edad6.png

当存储过程引发异常时,可以使用以下代码获取异常并将异常更新到特定字段,这在检查数据时方便检查数据抛出异常.

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

报价

115ad8fc74d3bcbcd367230119ed3a11.jpg

异常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对于表中的一列,该列已被限制为唯一索引,程序尝试存储两个重复的值

25b11b5a6fe31a746a710368725f49b6.png

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语句可以捕获其他条件

4345f72e97e5ce0bcf8da6411dab2a73.png

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

20180110165646798474.jpg

错误原因: 当两个存储过程相互调用时,一个被调用的存储过程碰巧只是被编译了,但是调用者的存储过程尚未被编译. 此时的数据将引发此异常.

解决方案: 重新编译调用方的存储过程,然后重新同步数据以解决该问题.

引发异常的三种方法:

引发异常的三种方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值