学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务。虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事务,而使用断点回滚只会回滚到声明断点的地方,之前的产生的事务仍需要提交的,如果不提交,事务一直在数据库中缓存.

Demo:

procedure doSomeThing(p_number out number) as

begin

insert into t_test_user_mingming(id,loginname,password,realname,type)

values(se_test_user_mingming_id.nextval,'xiaoming','1234','小明',1);

p_number := 1;

savepoint ps;--- 设置断点 ps

insert into t_test_info_mingming(id,pal,type,create_time,note)

values(se_test_info_id.nextval,'我想买台thinkPad 可以俺莫有钱',1,sysdate,'ceshi');

p_number := 2;

savepoint sp;----设置断点 sp

insert into t_test_agent(agent_id) values(1);---我这里此行会抛出异常 ORA-01400  可以替换为下句 手动抛出一个异常

-----RAISE_APPLICATION_ERROR (-20004,'抛出的异常玩玩');

commit;

exception  --捕获异常

when others then

rollback to ps;  ---- 如果产生异常,回滚到断点 ps

p_number :=0;

commit;  --- 提交事务

end doSomeThing;

这里本人做了实验,如果在异常中不加 commit 语句,使用PL/SQL测试时,异常在缓存,t_test_user_mingming 表中没有数据记录。

存储过程里的事务操作:

create or replace procedure pr_mypro2(p_a in varchar2,p_b in varchar2,p_count out number)

temp varchar2(1000);   /*定义临时变量*/

is

begin

select code into p_count from table1 where a=p_a; /*查询并返回值*/

temp := p_count;  /*将返回值赋给临时变量*/

savepoint point1;  /*保存点*/

insert into table2(a,b)values(temp,p_b); /*将临时变量值添加到新表的字段*/

savepoint point2;

insert into

 exception

      when   others   then

          rollback to savepoint point1;  /*异常处理,保存点下面的操作都不会被执行*/

         return;

end;

保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务。

如果定义了多个savepoint,当指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint)。

例如,在一段处理中定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,将会滚整个事务处理。

oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint相关推荐

  1. oracle跳过undo回滚段启动,[Oracle] 解析在没有备份的情况下undo损坏怎么办

    如果Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,不过如果没有备份,可以采用一种非常规的手段(利用Oracle的隐藏参数), 如果此时undo包含未提交的事务,会造成一点点的数 ...

  2. oracle数据库回滚率高,oracle数据库回滚

    线下测试数据误操作,回滚攻略--把数据捞出来,这个时间自己设置 --表名一定要是:xx_tbd日期 CREATE TABLE user_tbd0718 AS select * from user as ...

  3. oracle 回滚空间查询,oracle回滚段和回滚表空间操作

    1.查询回滚段信息:状态为ONLINE,当前UNDO表空间为undotbs1 SQL>select segment_name, owner, tablespace_name, status fr ...

  4. oracle对sga统计信息不对,关于oracle sga设置的总结,很经典--转

    关于oracle sga设置的总结,很经典--转 说明: 本总结不针对特例,仅对服务器只存在OS + ORACLE 为例,如果存在其他应用请酌情考虑.写这个也是因为近来这种重复性的问题发生的太多所导致 ...

  5. oracle闪回15分钟前,Oracle闪回技术(Flashback)

    闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来"观察"过去:闪回数据归档并不是一个独立的功能,其功能是扩展 ...

  6. oracle dcd设置,Oracle DCD配置缓解12170问题

    Oracle Net是负责实现从客户端到服务器的重要组件.在连接和保持通信过程中,Oracle Net都是担负着重要的职责.在实际运维环境中,一些连接和通信故障,都需要对于Oracle Net进行相应 ...

  7. Oracle RMAN 设置和配置(一)

    一. 配置数据库以ARCHIVELOG 模式运行 在ORACLE 10g 之前,在将数据库置入Archivelog 模式后,需要启动arch进程. 设置参数LOG_ARCHIVE_START 为tru ...

  8. 数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...

    一. Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间-- ...

  9. oracle11g创建闪回分区多大,Oracle闪回区大小预估

    一个朋友问如何设置Oracle闪回区大小,有什么依据没有. 查证官方文档,有如下描述 For example, if you intend to setDB_FLASHBACK_RETENTION_T ...

最新文章

  1. 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理
  2. Solr环境搭建及IK分词的集成及solrJ的调用(一)
  3. 学习C#中调用COM,后期绑定(以及对WinHttp COM对象的C#封装)
  4. 数字采购:企业互联网新引擎
  5. AI监测分析课堂背后的旷视科技:清华学霸创立,半年亏损52亿
  6. 精读《REST,GraphQL,Webhooks gRPC 如何选型》
  7. Java对接SAP平台接口
  8. Java+大数据开发——Hadoop集群环境搭建(二)
  9. leetcode No.21 合并两个有序链表
  10. 2.2 获取图像感兴趣区域_基于Hu距的图像旋转矫正之OpenCV实现
  11. python是什么语言-python是什么语言?哪些人适合学习Python?
  12. js 串口通信mscomm接收undefined_串口通信帧的同步方法(识别一帧数据的起始结束)42...
  13. windows的映射驱动器
  14. 微软拼音中设置小鹤双拼
  15. 换钱计划调用函数c语言编程,CCF NOI1034 钞票兑换
  16. 520了,用32做个简单的小程序
  17. iOS事件传递链与响应链
  18. 请问 e^π 和 π^e 哪个大?
  19. linux下基于SMTP协议的C++邮件客户端
  20. 设计模式之结构型模式(5种)

热门文章

  1. 如何给女朋友解释什么是撞库、脱库和洗库?
  2. java类的理解_Java类该怎么理解?
  3. ElasticSearch 中的中文分词器该怎么玩?_03
  4. 1分钟 搭建xxl-job任务调度中心
  5. Springboot整合Quartz集群部署以及配置Druid数据源
  6. 快速开发工作流_02_集成在线流程设计器
  7. form表单提交,后台实体类接收转义问题
  8. 实战01_SSM整合ActiveMQ支持多种类型消息
  9. React简介及基础用法
  10. 08服务器许可证安装向导,08_安装部署GRID许可证服务器.pdf