`

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

 
阅读更多

原创于2008年01月10日,2009年10月15日迁移至此。


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


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;

分享到:
评论

相关推荐

    SavePoint.java

    SavePoint.java

    关于MySQL中savepoint语句使用时所出现的错误

    前几天帮同事解决一个案例,在主从复制环境下,从库上的MySQL版本号是5.5.5,遇到下面的错误: #其他非相关信息我都隐藏掉了 ... Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1064 ...

    JDBC事务管理及SavePoint示例Java开发Jav

    JDBC事务管理及SavePoint示例Java开发Java经验技巧共12页.pdf.zip

    基于Flink Rest API 二开的Web 控制台,支持作业管理、一键Savepoint及恢复,可视化实时数据同步功能

    基于Flink Rest API 二开的Web 控制台,支持作业管理、一键Savepoint及恢复,可视化实时数据同步功能(Binlog),多集群管理,开箱即用。基于 flink rest api 的 flink web admin,支持任务持久化管理,JOB编辑、提交...

    SavePoint-crx插件

    语言:English 保存页面滚动并在需要时将其对齐。 单击“ S”图标可在滚动页面时在任意位置...最适用于Twitter和Facebook等网站。 键盘快捷键:Win:Ctrl + Shift + S(添加保存点)Mac:Cmd + Shift + S(添加保存点)

    python入门到高级全栈工程师培训 第3期 附课件代码

    07 django模板之自定义filter和simple_tag 08 django模板之继承标签extend和添加标签include 第51章 01 数据库表与表之间的一对多多对多的关系 02 Django的ORM的概念 03 ORM对单表的增删改操作 04 ORM查询API 05 ...

    mysql官方中文参考手册

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MYSQL中文手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE...

    MySQL 5.1参考手册中文版

    目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ...13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET ...

    MySQL 5.1参考手册

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MySQL 5.1中文手冊

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MySQL5.1参考手册官方简体中文版

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    Oracle数据操作和控制语言详解.pdf

    在csdn下载里面搜索到的都是格式很不好的...10. Savepoint 和 部分回滚(Partial Rollback) 5 11. 一致性和事务 6 12. 建立和修改用户 8 13. 创建和更改用户账号 9 14. 权限和角色 10 15. 对象权限 11 16. 系统权限 12

    MySQL 5.1参考手册 (中文版)

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    sqlite3文件(sqlite3:not found 解决方法)

    sqlite3文件(用于解决安卓真机中sqlite3:not found的错误) http://blog.csdn.net/hust_twj/article/details/52212558

    MySQL 5.1官方简体中文参考手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    数据库基础

    §3.3.8 标记不使用的列和删除不使用的列 104 §3.3 主键 106 §3.3.1 创建主键 106 §3.3.2 改变主键 109 §3.3.3 删除主键 109 §3.4 外部键 110 §3.4.1 建立外部键 110 §3.4.2 修改外部键 112 §3.4.3 删除外部...

    Oracle8i_9i数据库基础

    §3.3.8 标记不使用的列和删除不使用的列 104 §3.3 主键 106 §3.3.1 创建主键 106 §3.3.2 改变主键 109 §3.3.3 删除主键 109 §3.4 外部键 110 §3.4.1 建立外部键 110 §3.4.2 修改外部键 112 §3.4.3 删除外部...

Global site tag (gtag.js) - Google Analytics