oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint

学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后,都忘记了一个很重要的事情,提交事务。虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事务,而使用断点回滚只会回滚到声明断点的地方,之前的产生的事务仍需要提交的,如果不提交,事务一直在数据库中缓存.

Demo:

procedure doSomeThing(p_number out number) as

begin

insert into t_test_user_mingming(id,loginname,password,realname,type)

values(se_test_user_mingming_id.nextval,'xiaoming','1234','小明',1);

p_number := 1;

savepoint ps;--- 设置断点 ps

insert into t_test_info_mingming(id,pal,type,create_time,note)

values(se_test_info_id.nextval,'我想买台thinkPad 可以俺莫有钱',1,sysdate,'ceshi');

p_number := 2;

savepoint sp;----设置断点 sp

insert into t_test_agent(agent_id) values(1);---我这里此行会抛出异常 ORA-01400  可以替换为下句 手动抛出一个异常

-----RAISE_APPLICATION_ERROR (-20004,'抛出的异常玩玩');

commit;

exception  --捕获异常

when others then

rollback to ps;  ---- 如果产生异常,回滚到断点 ps

p_number :=0;

commit;  --- 提交事务

end doSomeThing;

这里本人做了实验,如果在异常中不加 commit 语句,使用PL/SQL测试时,异常在缓存,t_test_user_mingming 表中没有数据记录。

存储过程里的事务操作:

112652130.gifcreate or replace procedure pr_mypro2(p_a in varchar2,p_b in varchar2,p_count out number)

112652130.gif

112652131.giftemp varchar2(1000);   /*定义临时变量*/

112652130.gifis

112652130.gifbegin

112652130.gif

112652131.gifselect code into p_count from table1 where a=p_a; /*查询并返回值*/

112652131.giftemp := p_count;  /*将返回值赋给临时变量*/

112652131.gifsavepoint point1;  /*保存点*/

112652130.gif

112652131.gifinsert into table2(a,b)values(temp,p_b); /*将临时变量值添加到新表的字段*/

112652130.gif

112652130.gifsavepoint point2;

112652130.gif

112652130.gifinsert into 

112652132.gif

112652130.gif

112652130.gif

112652130.gif exception   

112652130.gif      when   others   then   

112652131.gif          rollback to savepoint point1;  /*异常处理,保存点下面的操作都不会被执行*/

112652130.gif         return; 

112652130.gif

112652130.gifend;

112652130.gif

保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务。

如果定义了多个savepoint,当指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint)。

例如,在一段处理中定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,将会滚整个事务处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php tp5清空数据表并主键,tp5数据库——更新数据

更新数据更新数据表中的数据Db::table(think_user)->where(id, 1)->update([name > thinkphp]);如果数据中包含主键,可以直接使用:Db::table(think_user)->update([name > thinkphp,id>1]);update 方法返回影响数据的条数,…

oracle几个网络,ORACLE网络的几个重点概念

数据库名(DB_NAME)、数据库实例名(INSTANCE_NAME)、操作系统环境变量ORACLE_SID、数据库服务名 (SERVICE_NAME)、数据库域名(DB_DOMAIN)以及全局数据库名(GLOBAL_DB_NAME)是几个使用Oracle数据库容易混 淆的概念。1、数据库名与实例名数据库名(DB_NAME):是区分数据的…

oracle每季度补丁,Oracle 2020 年第四季度补丁发布

半个月前,也就是 10 月 20 日, Oracle 发布了今年最后一次补丁更新,那么很多人都想打最新的 PSU,理由是有被扫到各种漏洞,有的扫描工具着实太坑,这里就不用说了,前几天看到盖总发布的文章2020年…

php flash上传进度条,PHP_PHP+FLASH实现上传文件进度条相关文件 下载,PHP之所以很难实现上传进度条 - phpStudy...

PHPFLASH实现上传文件进度条相关文件 下载PHP之所以很难实现上传进度条是因为在我们上传文件到服务器的时候,要等到文件全部送到服务器之后,才执行相应的php文件。在这之前,文件数据保存在一个临时文件里面,而php无法获得这个文件…

oracle截取时间函数6,SQL 取日期部分函数

convert(varchar(10),getdate(),120)这个函数就可以得到日期部分了,我觉得还是比较方便的,我觉得SQL在日期方面,没有ORACLE函数坐的好。。Sql Server中的日期与时间函数1. 当前系统日期、时间select getdate()2. dateadd 在向指定日期加上一…

oracle 找不到程序,Oracle 找不到监听程序

Oracle服务器文件 app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.oraSID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME CLRExtProc)(ORACLE_HOME D:\app\Administrator\product\11.2.0\dbhome_1)(PROGRAM extproc)(ENVS "EXTPROC_DLLSONLY:D:\…

oracle中的存储过程教程,oracle 存储过程

-- 查看系统定时任务SELECT * FROM DBA_JOBS-- 新建定时任务DECLAREjobno NUMBER;BEGINSYS.DBMS_JOB.SUBMIT(JOB > jobno, /*自动生成JOB_ID*/WHAT > qmcb_ls_data;, /*需要执行的存储过程名称或SQL语句*/NEXT_DATE > SYSDATE, /*初次执行时间-立即执行*/INTERVAL >…

Oracle segment啥意思,关于oracle数据库段segment的小结

段(segment)是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件是组成逻辑表空间的基本物理存储单位)今天碰到一个高水位问题:一个分区表,删除某个分区中的一些数据后,表空间并没有回…

Linux在文件第一行添加字符,使用shell命令给文件中每一行的前面、后面、指定列添加字符...

shell给一个文件中的每一行开头插入字符的方法:awk {print "X"$0} fileNameshell给一个文件中的每一行结尾插入字符的方法:awk {print $0"X"} fileNameshell给一个文件中的每一行的指定列插入字符的方法:awk $O$O" …

路由器 刷 linux系统版本,在Linux下用tftp刷写路由器固件

(以Buffalo WHR-G300N V2路由器为例)以发行版Ubuntu为例(如果你在Windows下,可下载Ubuntu的ISO文件,再用wubi安装Ubuntu,可免去重新分区的麻烦),下载Buffalo WHR-G300N V2路由器的FTP版固件文件,放到Ubuntu的/home目录…

linux没有etho网卡,关于怎么解决CENTOS7没有ETH0网卡这个问题

CentOS7系统安装完毕之后,输入ifconfig命令发现没有eth0,不符合我们的习惯。而且也无法远程ssh连接。1.进入目录/etc/sysconfig/network-scripts/2.将文件ifcfg-ens33重命名为ifcfg-eth0;(注意:修改需要切换至root用户)3.编辑ifcfg-eth0使用命令&#xf…

linux添加物理卷编辑文件夹,Red hat Linux下的逻辑卷管理器LVM-上

【IT168 专稿】Red hat 下的LVM 上 LVM是Logical Volume Manager(逻辑卷管理器)的简写,它为主机提供了更高层次的磁盘存储管理能力。LVM可以帮助系统管理员为应用与用户方便地分配存储空间。在LVM管理下的逻辑卷可以按需改变大小或添加移除。另外,LVM可以…

linux的nfs端口号,#Linux NFS服务 固定端口及防火墙配置#

#Linux NFS服务 固定端口及防火墙配置#1.在Linux上正常安装NFS服务2.修改/etc/service,添加以下内容(端口号必须在1024以下,且未被占用)# Local servicesmountd 1011/tcp #rpc.mountdmountd 1011/udp #rpc.mountdrquotad 1012/tcp #rpc.rquotadrquotad 1012/udp #rp…

嵌入式linux添加环境变量,Linux环境变量

前言:1. 环境变量是操作系统环境设置的变量,适用于整个系统的用户进程;2. 环境变量可以在命令中设置,但是用户注销的时候将会丢失这些设置值;3. 若要重复适用,则最好在.profile中定义;环境变量的…

eval函数linux,Python中的eval()、exec()及其相关函数

刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档。这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals()、locals()和compile():1. eval函数函数的作用:计算指定表达式的值。也就是说它要执行…

linux更改语言脚本,Linux shell脚本入门——shell语言脚本【CentOS】

认识脚本是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。脚本语言又被称为扩建的语言, 或者动态语言, 是一种编程语言, 用来控制软件应用程序, 脚本通常是以文本 (ASCⅡ) 保存, 只是在被调用时进行解释或者编译。学习shell脚本的用途对于一个合格的系…

linux可用的ftp,linuxunix下有很多可用的ftp服务器

一、ftp服务器简介linux/unix下有很多可用的ftp服务器,根据这些ftp服务器的可配置性大概可以分为3类:弱、中等、高。功能比较简单的ftp服务器软件有“ftpd”和“oftpd”。前者与ftp客户端工具“ftp”类似,只实现了标准的ftp功能,支…

linux视图版怎么输入命令,分享在Linux命令下操作MySQL视图实例代码

视图VIEW命令简介:VIEW视图就是存储下来的SELECT语句数据1。创建视图命令格式:创建[或更换][ALGORITHM {UNDEFINED | MERGE | 不是Temptable}][DEFINER {user | 当前用户 }][SQL SECURITY {DEFINER | INVOKER}]VIEW view_name [(column_list)]AS selec…

宝塔linux 做负载均衡,利用BT宝塔面板做网站多服务器负载均衡图文教程

对于我们做网站的来说,如果流量大了,一台服务器肯定是不够的,接下来要考虑很多方面,比如动静分离、比如数据库异步,比如负载均衡等等。因为我们很多新手站长都用的是BT宝塔面板,下面虾皮路就介绍一下利用BT…

c语言程序设计移动字母,C语言程序设计模拟试题二(含答案)

C语言程序设计模拟试题二(含答案)1、下列电子邮件地址中正确的是(其中□表示空格)A) Malin&http://www.doczj.com/doc/2969157fa26925c52cc5bfdc.html B) malinhttp://www.doczj.com/doc/2969157fa26925c52cc5bfdc.htmlC) Lin□Ma&http://www.doczj.com/doc/2969157fa2…