视频剪辑自学 追星:SavePoint (bzszp ) - bzszp的专栏 - CSDN博客
来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 11:48:09
保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务,这在PL/SQL开发中还是很有用处的。
下面的例子中,把SAVEPOINT标记在INSERT语句之前,如果这条INSERT语句试图将重复的数据保存到EMP表中的话,将触发执行预先定义的DUP_VAL_ON_INDEX例外处理,在这里面的ROLLBACK TO do_insert命令将回滚上面的那条INSERT操作,而不会影响前面的任何操作。DECLARE
emp_id emp.empno%TYPE;
BEGIN
UPDATE emp SET ... WHERE empno = emp_id;
DELETE FROM emp WHERE ...
...
SAVEPOINT do_insert;
INSERT INTO emp VALUES (emp_id, ...);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO do_insert;
END;如果你定义了多个savepoint,当你指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint)。例如,在一段处理中
你定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,将会滚整个事务处理。如果你在递归子程序里面定义了一个savepoint, 如果每一个递归层都设置了SAVEPOINT. 此时, 你只能回滚到最近的一个savepoint. Savepoint的声明可以在同一个事务处理里面重复定义. 它的作用就是把savepoint从上一个位置转移到目前的位置. 因而,执行回滚也只回滚到最近的savepoint.
下面是一个例子: BEGIN
...
SAVEPOINT my_point;
UPDATE emp SET ... WHERE empno = emp_id;
...
SAVEPOINT my_point; -- move my_point to current point
INSERT INTO emp VALUES (emp_id, ...);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO my_point;
END;另外,Oracle没有对每个session里面可以使用的savepoint个数做限制。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bzszp/archive/2004/01/20/14282.aspx
下面的例子中,把SAVEPOINT标记在INSERT语句之前,如果这条INSERT语句试图将重复的数据保存到EMP表中的话,将触发执行预先定义的DUP_VAL_ON_INDEX例外处理,在这里面的ROLLBACK TO do_insert命令将回滚上面的那条INSERT操作,而不会影响前面的任何操作。DECLARE
emp_id emp.empno%TYPE;
BEGIN
UPDATE emp SET ... WHERE empno = emp_id;
DELETE FROM emp WHERE ...
...
SAVEPOINT do_insert;
INSERT INTO emp VALUES (emp_id, ...);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO do_insert;
END;如果你定义了多个savepoint,当你指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint)。例如,在一段处理中
你定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,将会滚整个事务处理。如果你在递归子程序里面定义了一个savepoint, 如果每一个递归层都设置了SAVEPOINT. 此时, 你只能回滚到最近的一个savepoint. Savepoint的声明可以在同一个事务处理里面重复定义. 它的作用就是把savepoint从上一个位置转移到目前的位置. 因而,执行回滚也只回滚到最近的savepoint.
下面是一个例子: BEGIN
...
SAVEPOINT my_point;
UPDATE emp SET ... WHERE empno = emp_id;
...
SAVEPOINT my_point; -- move my_point to current point
INSERT INTO emp VALUES (emp_id, ...);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO my_point;
END;另外,Oracle没有对每个session里面可以使用的savepoint个数做限制。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bzszp/archive/2004/01/20/14282.aspx
SavePoint (bzszp ) - bzszp的专栏 - CSDN博客
bbbbbbj的专栏 - CSDN博客
vc++ - lonelytreebjfu的专栏 - CSDN博客
ASCII码表 - heruibin的专栏 - CSDN博客
tcp cwnd - linweixuan的专栏 - CSDN博客
RTMP是什么 - Thinkor2k8的专栏 - CSDN博客
手机知识 - whpeace的专栏 - CSDN博客
指针Guide - chinahai的专栏 - CSDN博客
数据库触发器 - chinayuan的专栏 - CSDN博客
中国式管理 - wmnothing的专栏 - CSDN博客
IE捉迷藏 - bluesqsr的专栏 - CSDN博客
C#处理文本文件的常用操作(转) - sluggard的专栏 - CSDN博客
C 中Reference与指针(Pointer)的使用对比 - wu928320442的专栏 - CSDN博客
C2连续的三次B样条插值(c++) - coolend的专栏 - CSDN博客
数据库设计的黄金经验(转) - szg3827的专栏 - CSDN博客
USB有关的编程 - sanshao27的专栏 - CSDN博客
一篇很实用的入门教程 - ph9527的专栏 - CSDN博客
软件开发的效率 - wmnothing的专栏 - CSDN博客
VB的浮点数处理 - zdingyun的专栏 - CSDN博客
程序员的面包 - ShaHuShaBoJue的专栏 - CSDN博客
工作的5个阶段 - bingling525的专栏 - CSDN博客
变参函数的实现 - 菜鸟的专栏 - CSDN博客
DLL Hell的解决方案 - jonathandj的专栏 - CSDN博客
IM服务器的架构 - sanfengshou的专栏 - CSDN博客