savepoint是事务内部允许部分rollback的标志符。因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点。如果遇到错误,就可以rollback到不同的点或直接回来事务最开始的点。

SAVEPOINT和ROLLBACK TO SAVEPOINT语法:

SAVEPOINT identifier

ROLLBACK [WORK] TO SAVEPOINT identifier

RELEASE SAVEPOINT identifier

例子:

create table t(id number,name varchar2(10));

//创建savepoint t1

insert into t values (1,'Tough1');

savepoint t1;

//创建savepoint t2

insert into t values (2,'Tough2');

savepoint t2;

//创建savepoint t3

update t set name='Tough' where id=2;

savepoint t3;

//回滚到update之前的状态,savepoint t3丢失

rollback to savepoint t2;

//回到第一个insert之前的状态,即空表。

rollback;

//如果执行COMMIT,当前事务的所有保存点被删除

commit;

delete from t where id=1;

savepoint t4;

//COMMIT后,当前事务的所有保存点被删除。rollback时出现错误。

//ORA-01086: 从未创建保存点 'T3'

rollback to savepoint t3;

Savepoints在应用程序中同样有用。如果一个过程包含几个函数,那可以在每个函数前创建一个savepoint。如果一个函数失败,返回数据到函数开始前的状态并在修改参数或执行一个恢复操作后重新运行函数就非常容易。

在回滚到一个savepoint后,Oracle释放由被回滚的语句持有的锁。其他等待之前被锁资源的事务可以进行了。其他要更新之前被锁行的事务也可以执行。

当一个事务回滚到一个savepoint,发生下列事件:

1. Oracle仅回滚savepoint之后的语句。

2. Oracle保留这一savepoint,但所有建立于此后的savepoints丢失。

3. Oracle释放在该savepoint后获得的所有表、行锁,但保留之前获得的所有锁。

4. 事务保持活动并可继续。

无论何时一个会话在等待事务,到savepoint的回滚不会释放行锁。为了确保事务如果无法获得锁也不会悬挂(hang),在执行UPDATE或DELETE前使用FOR UPDATE ... NOWAIT。(这里指回滚的savepoint之前获得的锁。该savepoint后获得的行锁会被释放,之后执行的语句也会被彻底回滚。)

如果执行COMMIT,当前事务的所有保存点被删除。rollback时出现错误-ORA-01086: 从未创建保存点 'T3'。

Oracle中rownum的基本用法

Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...

Oracle 中 CONTAINS 函数的用法

Oracle 中 CONTAINS 函数的用法 1. 查询住址在北京的学生 SELECT student_id,student_name FROM students WHERE CONTAINS( a ...

[转载]Oracle中TO_NUMBER()函数的用法

1 用法简介TO_NUMBER函数()是Oracle中常用的类型转换函数之一,主要是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反. To_number函数的格式如下: To_nu ...

Oracle中 to_date和to_char用法

to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...

Oracle中to_number()函数的用法

to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

oracle 中 to_date 函数的用法

常犯错的使用方法. to_date('2019-08-12 22:05:','yyyy-MM-dd HH24:mm:ss') Oracle中会引起错误:"ORA 01810 格式代码出现两次 ...

oracle中分组排序函数用法 - 转

项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

【Oracle】Oracle中dump函数的用法

一.函数标准格式: DUMP(expr[,return_fmt[,start_position][,length]]) 基本参数时4个,最少可以填的参数是0个.当完全没有参数时,直接返回null.另外 ...

Oracle中的时间函数用法(to_date、to_char) (总结)

一.24小时的形式显示出来要用HH24 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual; select to_date('2005- ...

随机推荐

CSS魔法堂:"那不是bug,是你不懂我!" by inline-block

前言  每当来个需要既要水平排版又要设置固定高宽时,我就会想起display:inline-block,还有为了支持IE5.5/6/7的hack*display:inline;*zoom:1;.然后发 ...

tyvj1148 小船弯弯

描述 童年的我们,充满了新奇的想法.这天,小朋友们用彩虹画笔在云霞上绘制了世界上最美丽的图画.那描绘的是一条大河波浪宽,风吹稻花香两岸的情景.欣赏着自己的作品,小朋友们别提多开心了.这时,Q小朋友对C ...

MongoDB 3.0 新特性【转】

本文来自:http://www.open-open.com/lib/view/open1427078982824.html#_label3 更多信息见官网: http://docs.mongodb.o ...

block大小和分区最大容量单个文件最大容量的关系

block大小和单个文件最大容量的关系(文章来自鸟哥的Linux私房菜http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_1.php#ps2) ...

access数据库连接问题

使用Visual Studio连接access数据库(数据库后缀.accdb)时连接不上(access数据库提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序)解决办 ...

server端推送消息机制

推送技术相关请参加WIKI: https://zh.wikipedia.org/wiki/%E6%8E%A8%E9%80%81%E6%8A%80%E6%9C%AF 场景: 监控系统:后台硬件温度.电压 ...

thinkphp通行证服务,验证登录,注销登录

会话数据的管理——Session

cookie的局限性: cookie只能存字符串类型.不能保存对象 只能存非中文 1个cookie的容量不超过4KB(如果要保存非字符串,超过4kb内容,只能使用session技术!!!) Sessi ...

SignalR2.0开发实例之——群发消息

一.前言 ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相 ...

opewrt上传文件

设备上运行的openwrt,当tftp和ftp都无法使用时,可以使用命令scp在两台linux设备上copy文件. 当设备启动起来后,输入命令: scp hbg@192.168.2.32:/home/ ...

oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法相关推荐

  1. oracle分组聚合查询,Oracle中分组查询group by用法规则解析

    本篇文章小编给大家分享一下Oracle中分组查询group by用法规则解析,文章介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Oracle中group by ...

  2. oracle中的and用法,Oracle bitand( )函数简介

    Oracle bitand( )函数在Oracle数据库中是很常见的,下面就为您详细介绍Oracle bitand( )函数的用法,如果您感兴趣的话,不妨一看. Oracle bitand( )函数: ...

  3. oracle中的to_number,Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

  4. oracle 中WITH AS,oracle的with as用法

    转自:https://www.cnblogs.com/linjiqin/archive/2013/06/24/3152667.html –针对多个别名 with tmp as (select * fr ...

  5. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  6. oracle中rollback命令,9.2.4 执行ROLLBACK命令

    9.2.4  执行ROLLBACK命令 需要记住的是,如果出现任何错误,那么后台进程就会完全自动地回滚正在进行的事务.例如,如果启动某个事务的会话失败(运行用户进程的计算机可能重启,或者网络连接可能中 ...

  7. oracle中的select into,Oracle中insert into select和select into的用法

    Oracle中insert into select和select into的用法 两张表进行数据的拷贝,最常用的拷贝语句是: insert into select 和select into from ...

  8. oracle求和分组排序,oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  9. oracle union详解,oracle union用法 oracle中union的用法

    oracle中union的用法 只知道是用来左联接的,还有类似union all,谁有这个例子,要解释详细一点的一生中要有两次冲动,一次奋不顾身的爱情,一次为说走就走的旅行. UNION 指令的目的是 ...

最新文章

  1. php仿攻击,PHP写的仿DDOS攻击程序代码
  2. WPF 之 调用线程必须为 STA,因为许多 UI 组件都需要
  3. Makefile中关于shell 语句使用的注意事项
  4. “全能”选手—Django 1.10文档中文版Part2
  5. 【故障修复】SharePoint Designer 无法登陆网站
  6. java 读文件夹_java怎么读取读取文件夹下的所有文件夹和文件?
  7. Thread类的有关常用方法
  8. 【数据结构与算法】【字符串匹配】Trie树
  9. git安装 tor_Tortoisegit图文使用教程
  10. 浅谈JS、Ajax、JQuery之间的关系
  11. How to proof Pi
  12. 在Oracle数据库启动时提示没有权限 ora-01031:insufficient privileges
  13. 汉字转拼音首字母大写
  14. pdfFactory2020最新7许可密钥-激活码版虚拟打印软件 中文特别授权版下载
  15. Sqlite锁与事务
  16. photoshop 抠图
  17. 配置华为防火墙接口IP地址和区域
  18. CentOS7.6 无网络环境安装MySQL5.7.x
  19. 持续更新 BUUCTF——PWN(一)
  20. 反驳李刚的针对我吐槽的回应,曝光疯狂java李刚的骗子行径

热门文章

  1. 计算机网络原理 [第一章] 概述
  2. yun yun de
  3. 使用colab训练faster-rcnn pytorch版(代码来源:霹雳吧啦Wz)
  4. SpringBoot集成TkMybatis
  5. java反射课程一:基本API使用
  6. 非现场执法管理计算机(工业级),非现场执法管理系统研究及应用
  7. Unity自由涂鸦轨迹检测(VR)
  8. 报错:Use /* eslint-disable */ to ignore all warnings in a file.
  9. html给文字添加音标
  10. 数据科学 案例7 决策树之电脑购买(代码)