关于SAVEPOINT和自定义异常使用的一点看法

简介:
前两天有同事问怎么样才能控制存储过程中的回滚和提交,以及如果某个环节发生错误之后怎么样退出该存储过程,想了两天才算是有点小眉目了。
 

Rollback to savepoint ;回滚之前所有做过的事情但不包括块和其他 savepoint 里面的事务
SavePoint 应该是个单独的事务点,他的失败不影响其他事务
Commit 能够提交之前所有的操作
-- Create table
CREATE TABLE TEST
(
testID NUMBER(20) not null,
testName VARCHAR2(20)
);
-- Create/Recreate primary, unique and foreign key constraints
ALTER TABLE TEST
ADD CONSTRAINT testprimaryKey PRIMARY KEY (testID);
-- Created on 2008-1-10 by bq_wang
DECLARE
-- Local variables here
exitProc EXCEPTION;
BEGIN
-- Test statements here
DELETE FROM test;
COMMIT;
SAVEPOINT b; --
INSERT INTO test VALUES(4,'d');
COMMIT WORK; -- 仅控制 b 之前的事务
BEGIN
SAVEPOINT a;
INSERT INTO test VALUES(1,'a');
INSERT INTO test VALUES(2,'b');
UPDATE test SET testID=1 WHERE testID=2;
COMMIT WORK;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT a; -- 如果有问题则回滚 savepoint a 的事务,不影响 savepoint b
RAISE exitProc; -- 直接跳到存储过程最后,如果屏蔽仍可以处理之后的事务
END;
SAVEPOINT c; -- 控制以下事务,如果屏蔽,则由最后的 commit 完成 b 和 c 的提交
INSERT INTO test VALUES(5,'e');
COMMIT WORK;
EXCEPTION
WHEN exitProc THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('end');
END; 
 




本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/312772 ,如需转载请自行联系原作者
相关文章
|
6月前
|
Java 编译器 程序员
【JavaSE专栏67】谈谈异常的那些事,学会预判异常、捕获异常、转移异常
【JavaSE专栏67】谈谈异常的那些事,学会预判异常、捕获异常、转移异常
【JavaSE专栏67】谈谈异常的那些事,学会预判异常、捕获异常、转移异常
|
5天前
|
Java
异常之道:探索Java异常处理与日志的黄金准则
异常之道:探索Java异常处理与日志的黄金准则
17 0
|
28天前
|
Java
Java异常的抛出
Java异常的抛出
8 0
|
3月前
|
Java 数据库连接 API
Seata异常捕获问题之回滚事务如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
275 1
|
3月前
|
存储 Java 编译器
Java异常到底是个啥——一次异常引发的思考
这篇文章主要通过三个部分阐释Java异常 - Java中异常的分类,异常的处理机制 - 异常的处理规范和实战,如何利用Springboot框架处理异常 - 从JVM的角度分析异常机制,包括`try-catch`, `try-finally`, `try-with-resource`的字节码分析
15 0
Java异常到底是个啥——一次异常引发的思考
|
7月前
|
Java Spring
Spring事务异常不回滚的原因
Spring事务异常不回滚的原因
270 0
|
8月前
|
Java Spring 容器
|
SQL Java 编译器
java异常分类,异常处理,面试中常见异常问题!
java异常分类,异常处理,面试中常见异常问题!
150 0
java异常分类,异常处理,面试中常见异常问题!
|
Java
Java异常处理(2)--异常处理机制及自定义异常
Java异常处理(2)--异常处理机制及自定义异常
104 0
Java异常处理(2)--异常处理机制及自定义异常
|
SQL Java 关系型数据库
rollback-only异常令我对事务有了新的认识(一)
rollback-only异常令我对事务有了新的认识(一)
163 0
rollback-only异常令我对事务有了新的认识(一)