oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint
学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务。虽然使用了断点回滚,但是断点回滚不像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相关推荐
- oracle跳过undo回滚段启动,[Oracle] 解析在没有备份的情况下undo损坏怎么办
如果Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,不过如果没有备份,可以采用一种非常规的手段(利用Oracle的隐藏参数), 如果此时undo包含未提交的事务,会造成一点点的数 ...
- oracle数据库回滚率高,oracle数据库回滚
线下测试数据误操作,回滚攻略--把数据捞出来,这个时间自己设置 --表名一定要是:xx_tbd日期 CREATE TABLE user_tbd0718 AS select * from user as ...
- oracle 回滚空间查询,oracle回滚段和回滚表空间操作
1.查询回滚段信息:状态为ONLINE,当前UNDO表空间为undotbs1 SQL>select segment_name, owner, tablespace_name, status fr ...
- oracle对sga统计信息不对,关于oracle sga设置的总结,很经典--转
关于oracle sga设置的总结,很经典--转 说明: 本总结不针对特例,仅对服务器只存在OS + ORACLE 为例,如果存在其他应用请酌情考虑.写这个也是因为近来这种重复性的问题发生的太多所导致 ...
- oracle闪回15分钟前,Oracle闪回技术(Flashback)
闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来"观察"过去:闪回数据归档并不是一个独立的功能,其功能是扩展 ...
- oracle dcd设置,Oracle DCD配置缓解12170问题
Oracle Net是负责实现从客户端到服务器的重要组件.在连接和保持通信过程中,Oracle Net都是担负着重要的职责.在实际运维环境中,一些连接和通信故障,都需要对于Oracle Net进行相应 ...
- Oracle RMAN 设置和配置(一)
一. 配置数据库以ARCHIVELOG 模式运行 在ORACLE 10g 之前,在将数据库置入Archivelog 模式后,需要启动arch进程. 设置参数LOG_ARCHIVE_START 为tru ...
- 数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...
一. Oracle数据库设置默认表空间问题 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间-- ...
- oracle11g创建闪回分区多大,Oracle闪回区大小预估
一个朋友问如何设置Oracle闪回区大小,有什么依据没有. 查证官方文档,有如下描述 For example, if you intend to setDB_FLASHBACK_RETENTION_T ...
最新文章
- 《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理
- Solr环境搭建及IK分词的集成及solrJ的调用(一)
- 学习C#中调用COM,后期绑定(以及对WinHttp COM对象的C#封装)
- 数字采购:企业互联网新引擎
- AI监测分析课堂背后的旷视科技:清华学霸创立,半年亏损52亿
- 精读《REST,GraphQL,Webhooks gRPC 如何选型》
- Java对接SAP平台接口
- Java+大数据开发——Hadoop集群环境搭建(二)
- leetcode No.21 合并两个有序链表
- 2.2 获取图像感兴趣区域_基于Hu距的图像旋转矫正之OpenCV实现
- python是什么语言-python是什么语言?哪些人适合学习Python?
- js 串口通信mscomm接收undefined_串口通信帧的同步方法(识别一帧数据的起始结束)42...
- windows的映射驱动器
- 微软拼音中设置小鹤双拼
- 换钱计划调用函数c语言编程,CCF NOI1034 钞票兑换
- 520了,用32做个简单的小程序
- iOS事件传递链与响应链
- 请问 e^π 和 π^e 哪个大?
- linux下基于SMTP协议的C++邮件客户端
- 设计模式之结构型模式(5种)