SavePoint(bzszp)
来源:互联网 发布:java获取当月的第一天 编辑:程序博客网 时间:2024/06/05 11:44
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
保存点(SavePoint)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务,这在PL/SQL开发中还是很有用处的。
下面的例子中,把SavePoint标记在INSERT语句之前,如果这条INSERT语句试图将重复的数据保存到EMP表中的话,将触发执行预先定义的DUP_VAL_ON_INDEX例外处理,在这里面的ROLLBACKTOdo_insert命令将回滚上面的那条INSERT操作,而不会影响前面的任何操作。
DECLARE
emp_id emp.empno%TYPE;
BEGIN
UPDATEempSET...WHEREempno=emp_id;
DELETEFROMempWHERE...
...
SavePointdo_insert;
INSERTINTOempVALUES(emp_id,...);
EXCEPTION
WHENDUP_VAL_ON_INDEXTHEN
ROLLBACKTOdo_insert;
END;
如果你定义了多个SavePoint,当你指定回滚到某个SavePoint时,那么回滚操作将回滚这个SavePoint后面的所有操作(即使后面可能标记了N个SavePoint)。例如,在一段处理中
你定义了五个SavePoint,从第三个SavePoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACKTOSavePoint_name而使用ROLLBACK,将会滚整个事务处理。
如果你在递归子程序里面定义了一个SavePoint,如果每一个递归层都设置了SavePoint.此时,你只能回滚到最近的一个SavePoint.
SavePoint的声明可以在同一个事务处理里面重复定义.它的作用就是把SavePoint从上一个位置转移到目前的位置.因而,执行回滚也只回滚到最近的SavePoint.
下面是一个例子:
BEGIN
...
SavePointmy_point;
UPDATEempSET...WHEREempno=emp_id;
...
SavePointmy_point; --movemy_pointtocurrentpoint
INSERTINTOempVALUES(emp_id,...);
EXCEPTION
WHENOTHERSTHEN
ROLLBACKTOmy_point;
END;
另外,没有对每个session里面可以使用的SavePoint个数做限制.
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
保存点(SavePoint)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务,这在PL/SQL开发中还是很有用处的。
下面的例子中,把SavePoint标记在INSERT语句之前,如果这条INSERT语句试图将重复的数据保存到EMP表中的话,将触发执行预先定义的DUP_VAL_ON_INDEX例外处理,在这里面的ROLLBACKTOdo_insert命令将回滚上面的那条INSERT操作,而不会影响前面的任何操作。
DECLARE
emp_id emp.empno%TYPE;
BEGIN
UPDATEempSET...WHEREempno=emp_id;
DELETEFROMempWHERE...
...
SavePointdo_insert;
INSERTINTOempVALUES(emp_id,...);
EXCEPTION
WHENDUP_VAL_ON_INDEXTHEN
ROLLBACKTOdo_insert;
END;
如果你定义了多个SavePoint,当你指定回滚到某个SavePoint时,那么回滚操作将回滚这个SavePoint后面的所有操作(即使后面可能标记了N个SavePoint)。例如,在一段处理中
你定义了五个SavePoint,从第三个SavePoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACKTOSavePoint_name而使用ROLLBACK,将会滚整个事务处理。
如果你在递归子程序里面定义了一个SavePoint,如果每一个递归层都设置了SavePoint.此时,你只能回滚到最近的一个SavePoint.
SavePoint的声明可以在同一个事务处理里面重复定义.它的作用就是把SavePoint从上一个位置转移到目前的位置.因而,执行回滚也只回滚到最近的SavePoint.
下面是一个例子:
BEGIN
...
SavePointmy_point;
UPDATEempSET...WHEREempno=emp_id;
...
SavePointmy_point; --movemy_pointtocurrentpoint
INSERTINTOempVALUES(emp_id,...);
EXCEPTION
WHENOTHERSTHEN
ROLLBACKTOmy_point;
END;
另外,没有对每个session里面可以使用的SavePoint个数做限制.
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- SavePoint(bzszp)
- savepoint(回退点)
- savepoint
- SAVEPOINT
- Oracle 学习 (六) savepoint
- Postgresql保存点(savepoint)功能
- Postgresql保存点(savepoint)功能
- savepoint与rollback(savepoint)
- 关于oracle restore point 与savepoint的心得体会(转载)
- Oracle Savepoint
- 事务savepoint
- jdbc savePoint
- savepoint使用方法
- oracle savepoint
- Commit+Savepoint
- Jave savepoint的用法
- jdbc savepoint代码片段
- ORACLE SAVEPOINT使用解析
- 浮点数取小数点后几位并对小数四舍五入
- ubuntu8.04硬盘安装 转
- 关于flashback versions query 和flashback transaction query 特性
- 把javascript,vbscript中得数组传递给COM组件(or Act
- 跨平台C++程序开发经验小结
- SavePoint(bzszp)
- 同一个类,映射多个窗口
- Microsoft数据引擎MSDE
- 实现和IE浏览器交互的几种方法的介绍
- /var/spool/clientmqueue/目录下的产生大量文件的解决办法
- 基本性能调整2
- 流Mini驱动开发指南(二)
- 一句T-SQL语句引发的思考
- 掌握 Ajax,第 3 部分: Ajax 中的高级请求和响应