如果主存储过程和主函数又由子过程或子函数构成,在子函数或子程序中能否包含异常处理

要依据以下原则:

第一、如果主程序和子程序要作为一个事务来处理,则在子程序中不能触发异常,异常要到主调程序中取处理,如果在子程序中进行异常处理,如果子程序出现异常,进行异常处理后,还会继续执行主调程序中调用的出现异常的子程序的下面的代码,这样又开始了新的事务,这样破坏了事务的一致性,从而破坏了数据的一致性

主调程序如下:

procedure sp_procedure

is

vs_pay_year_month varchar2(6);

vs_sql  varchar2(10000);

begin

sp_procedure1;

sp_procedure2;

update emp set  empname='张三'  where empid='00001'

exception

WHEN OTHERS THEN

--发生异常,把禁止的触发器设为有效

vs_sql:='alter table sal_t_mainper enable all triggers';

execute immediate vs_sql;

end;

子程序:

procedure sp_procedure1

is

begin

update department set dept_name='人事部'  where deptid='0001'

delete  from department where deptid='0002'

exception

WHEN OTHERS THEN

--发生异常,把禁止的触发器设为有效

raise_application_error(-20001, '删除发生错误!');

end;

所以,在子程序中不允许处理异常,这样就会破坏数据的一致性

第二、如果主程序和子程序不作为一个事务来处理,则在子程序中可以触发异常,但这种情况很少。

oracle存储过程捕捉异常后回滚_Oracle存储过程中异常处理应注意的问题相关推荐

  1. springboot 事务手动回滚_Spring Boot中的事务是如何实现的

    1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...

  2. zzw原创_oracle循环中的异常捕捉_捕捉异常后并继续循环

    zzw原创_oracle循环中的异常捕捉_捕捉异常后并继续循环 参考文章: (1)zzw原创_oracle循环中的异常捕捉_捕捉异常后并继续循环 (2)https://www.cnblogs.com/ ...

  3. java 回滚异常_Spring事务管理只对出现运行期异常进行回滚

    Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚. 如果一个方法抛出Exception或者Checked异常,Spring事务管理默 ...

  4. oracle+ddl+执行很慢,Oracle的DDL语句不能回滚(直接提交)

    在Oracle中,Oracle执行DDL前会发出一个COMMIT语句,然后执行DDL操作,最后再发出一个COMMIT操作. 附: DDL(data definition language):creat ...

  5. 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚

    哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚 参考文章: (1)哪些异常是RuntimeException?Sql异常 ...

  6. 0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚

    0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚 参考文章: (1)0046 @Transactional注解的几个参数--事务传播控制--事务隔离级 ...

  7. @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚

    @Transactianal注解有一些属性,见Spring-Framework-Reference Table17.3 Transactional-settings @Transactional(pr ...

  8. 事务执行sql脚本,错误后回滚

    1.手动commit,rollback -- 开启事务 START TRANSACTION; -- 关闭自动提交 SET autocommit = 0;-- 要执行的sql INSERT INTO ` ...

  9. 冯柯《我的ORACLE笔记二:关于回滚段》接力来袭!

    感谢大家对此文的关注!我们的活动还在继续中~您对文章内容有任何疑问时,欢迎您点击原文链接,填写阅读反馈表.我们不仅会邀请作者来回答问题,还会从中抽取一位粉丝赠送精美礼品一份哦~ <我的ORACL ...

最新文章

  1. 世界机器人领域12个前沿技术趋势
  2. sharepoint 2007 网站操作 显示菜单不全
  3. python套接字socket的作用_【学习笔记】python实现的套接字socket
  4. easyui js拼接html,class属性失效的问题
  5. Spring boot的Spring MVC自动配置
  6. 安卓笔记之配置第一个程序
  7. 你人脉网中应该有的10种人
  8. 如何给小白解释什么是编解码器
  9. FCOS 基于FPN之上的完全Anchor Free检测框架
  10. 有趣的灵魂,从高质量的阅读开始
  11. SpringMVC实战(注解)
  12. gm怎么刷东西 rust_RUST:2020年7月第三周 修补和更新
  13. mysql dba命令_mysql DBA:mysqladmin常用命令总结
  14. 使用.net开发手机管理软件(一至三)
  15. 开发里程碑计划_如何通过里程碑控制项目进度
  16. Android运行时修改Manifest,Android如何动态修改Manifest文件
  17. Java selenium 设置代理
  18. 教师资格证综合素质作文素材
  19. samtools提取指定位置核酸或氨基酸序列
  20. hdu4565 so easy 矩阵

热门文章

  1. qmenu基本用法_使用QProxyStyle定制QMenu (二)
  2. 使用Docker搭建LAMP环境,上线wordpress
  3. retrofit与rxjava使用
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院HR人事管理系统
  5. java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考
  6. RAID 6 vs. RAID 10
  7. python接口测试之新手篇
  8. Spring 依赖注入(一、注入方式)
  9. 一个用js写的接口http调试程序
  10. Linux进程间通信[转]