oracle触发器的自治事务
1、插入数据,名次依次+1
今天有朋友提问说 ,oracle数据库怎么实现这个功能:
有一个排名表,插入一条数据排名为1的数据,之前表里数据1变成2,2,变成3类推、插入2,之前表里2变3,3变4类推,首先想到了触发器,在插入数据之前把排名大于等于当前的名次依次+1来实现。
比如表数据如下,rank字段代表名次
编写触发器如下:
create or replace trigger TRI_addbefore insert on bfor each row
declarebeginupdate b set b.RANk=b.RANk+1 where b.RANk>:new.RANk or b.RANk=:new.RANk ;
end TRI_add;
触发器创建好之后,插入一条数据测试一下:
insert into b (ID, RANk) values (3, 1);
插入数据后结果如下:
可以看到插入第一名之后,原来id为1的第一名rank标称了2,原来id为2的第二名rank变成了3,基本需求也算是满足了。
2、触发器自治事务,数据回滚,则触发器不回滚实现
朋友又问我说,你这个插入数据的时候回滚掉,那么原来排名的名次不会换掉,我现在如果插入数据再回滚,然后之前的排名任然+1这个怎么实现呢。
这个时候我们就可以使用自治事务,在触发器触发期间提交掉事务,不管插入数据的事务是否成功,因此在以上触发器上修改如下:
create or replace trigger TRI_addbefore insert on bfor each row
declare
PRAGMA autonomous_transaction;
beginupdate b set b.RANk=b.RANk+1 where b.RANk>:new.RANk or b.RANk=:new.RANk ;commit;
end TRI_add;
实际上就是增加了这两行
这个时候恢复数据,然后再执行插入数据,之后回滚再看结果
insert into b (ID, RANk) values (3, 1);
可以观察到id为3的数据没有插入,数据库排名数据却发生了变化。
oracle触发器的自治事务相关推荐
- 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
AUTONOMOUS TRANSACTION(自治事务)的介绍 在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题,比如想在执行当前一个由多个DML组成的transaction(事 ...
- ORACLE中的自治事务
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这是一个 ...
- Oracle提供的自治事务记录日志的方法
平时在存储过程或者触发器中,想对过程中出现的异常进行记录,但是又存在一个问题,就是异常的时候,之前的DML操作要回滚,那么对异常的记录的insert语句也要被回滚掉,怎么办?这个时候就可以用到Orac ...
- oracle:触发器,自治事务,instead of trigger,trigger
触发器的格式: CREATE [OR REPLACE ] TRIGGER trigger_name {BEFORE| AFTER} {UPDATE| INSERT| DELETE|SELECT} ON ...
- Oracle之自治事务
昨天处理项目中的一个业务需求要用到触发器实现,触发器中涉及到在inserting.deleting.updating之后来触发对表的操作,对于inserting.updating中的操作都可以正常实现 ...
- oracle 自治事物,自治事务 - 努力创造未来! - BlogJava
自治事务前的事务管理(一般事务管理) 像 DML 这样的数据库扣作都是在事务的上下文环境中执行的.事务是一个或多个 SQL 语句的序列,执行一定的工作逻辑单元.事务.定义的特定会话可以由 commit ...
- PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁
PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁 作者 digoal 日期 2016-11-04 标签 PostgreSQL ...
- Oracle自治事务
本文章来自http://hi.baidu.com/sqlercn/item/10f170c96fbbfad7964452b8 Oracle自治事务介绍 在正常情况下一但发出commit或是rollba ...
- oracle自治事务的写法_Oracle的自治事务
自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚.利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些 ...
最新文章
- 联想计算机无线网络设置密码,联想路由器怎么设置密码
- 【原创】rabbitmq-env.conf用户手册(翻译)
- 操作系统原理 : 非连续的内存分配,分段,页表
- 区块链系列教程之:比特币中的挖矿
- Atitit.每周计划日程表 流程表v3
- vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
- python创建虚拟环境失败_virtualenv 创建虚拟环境不成功
- 51 nod 1006 最长公共子序列Lcs
- 【转】移动Web开发-点击事件及页面滚动
- linux使用tar命令打包压缩时排除某个文件夹或文件
- Android 文件系统路径
- php $act,PHP_php Undefined index和Undefined variable的解决方法,$act=$_POST['act']; 用以上代码总 - phpStudy...
- Linux学习总结(1)——Linux命令大全完整版
- coffe的前端界面图(css+html)
- 大数据需要学习什么?
- 渗透学习心得-暴力破解
- 2019 Q1数字钱包行业报告 | TokenInsight
- “汉语编程”是解决安全问题的终极之路?
- 进程控制(二)——minishell延续
- 疫情之下:教育APP软件开发对企业的重要性