九、存储过程中异常的处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了九、存储过程中异常的处理相关的知识,希望对你有一定的参考价值。

参考技术A 原则如下:
1、存储过程中的异常要在本存储过程中进行处理。
2、存储过程中调用存储过程,被调用的如果发生了异常,一般父存储过程需要终止。
3、子存储过程中的异常处理不得污染父存储过程中的异常处理。

在这样的原则下,每个存储过程都要进行异常的声明与处理,处理完毕之后要抛出异常对父存储过程进行中断,否则因为子存储过程中的异常已经得到了处理,父存储过程会继续执行下去。又因为不能使父存储过程的异常处理被污染,所以最好的处理异常的方式就是声明变量,该变量专门为异常而存在,发生异常则变量值改变,处理完异常后,在父存储过程中判断该变量的值,如果子存储过程中发生了异常,则主动抛出异常,中断父存储过程的运行,这样就能分清楚异常到底是发生在具体的哪个存储过程中了。所以以后的异常处理就采用强哥的那种方式了。
如上。
测试存储过程:

关于raise_application_error的用法:

综上,异常处理大概有两种方式:

将异常保存到专门的表格中:

日志类存储过程:

测试类:

在上面的示例中要注意事务控制,在日志类中采用自治事务。这样的话,每次commit就只提交本过程中的dml,而不会影响到调用本过程的其他过程的事务。

以上是关于九、存储过程中异常的处理的主要内容,如果未能解决你的问题,请参考以下文章

db2 存储过程 异常处理

Informix 存储过程通用异常处理

oracle 存储过程异常处理

oracle存储过程报937错误

MySQL存储过程的“异常处理”

Oracle存储过程的异常处理