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触发器的自治事务相关推荐

  1. 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍

    AUTONOMOUS TRANSACTION(自治事务)的介绍 在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题,比如想在执行当前一个由多个DML组成的transaction(事 ...

  2. ORACLE中的自治事务

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这是一个 ...

  3. Oracle提供的自治事务记录日志的方法

    平时在存储过程或者触发器中,想对过程中出现的异常进行记录,但是又存在一个问题,就是异常的时候,之前的DML操作要回滚,那么对异常的记录的insert语句也要被回滚掉,怎么办?这个时候就可以用到Orac ...

  4. oracle:触发器,自治事务,instead of trigger,trigger

    触发器的格式: CREATE [OR REPLACE ] TRIGGER trigger_name {BEFORE| AFTER} {UPDATE| INSERT| DELETE|SELECT} ON ...

  5. Oracle之自治事务

    昨天处理项目中的一个业务需求要用到触发器实现,触发器中涉及到在inserting.deleting.updating之后来触发对表的操作,对于inserting.updating中的操作都可以正常实现 ...

  6. oracle 自治事物,自治事务 - 努力创造未来! - BlogJava

    自治事务前的事务管理(一般事务管理) 像 DML 这样的数据库扣作都是在事务的上下文环境中执行的.事务是一个或多个 SQL 语句的序列,执行一定的工作逻辑单元.事务.定义的特定会话可以由 commit ...

  7. PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁

    PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁 作者 digoal 日期 2016-11-04 标签 PostgreSQL ...

  8. Oracle自治事务

    本文章来自http://hi.baidu.com/sqlercn/item/10f170c96fbbfad7964452b8 Oracle自治事务介绍 在正常情况下一但发出commit或是rollba ...

  9. oracle自治事务的写法_Oracle的自治事务

    自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚.利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些 ...

最新文章

  1. 联想计算机无线网络设置密码,联想路由器怎么设置密码
  2. 【原创】rabbitmq-env.conf用户手册(翻译)
  3. 操作系统原理 : 非连续的内存分配,分段,页表
  4. 区块链系列教程之:比特币中的挖矿
  5. Atitit.每周计划日程表 流程表v3
  6. vc++6.0中创建工程时选Win32 Application和Win32 console Application的区别
  7. python创建虚拟环境失败_virtualenv 创建虚拟环境不成功
  8. 51 nod 1006 最长公共子序列Lcs
  9. 【转】移动Web开发-点击事件及页面滚动
  10. linux使用tar命令打包压缩时排除某个文件夹或文件
  11. Android 文件系统路径
  12. php $act,PHP_php Undefined index和Undefined variable的解决方法,$act=$_POST['act']; 用以上代码总 - phpStudy...
  13. Linux学习总结(1)——Linux命令大全完整版
  14. coffe的前端界面图(css+html)
  15. 大数据需要学习什么?
  16. 渗透学习心得-暴力破解
  17. 2019 Q1数字钱包行业报告 | TokenInsight
  18. “汉语编程”是解决安全问题的终极之路?
  19. 进程控制(二)——minishell延续
  20. 疫情之下:教育APP软件开发对企业的重要性

热门文章

  1. 计算机网络 丨 常用的电脑CMD命令
  2. 硬币问题(随机生成假硬币 找出它的位置)
  3. linux php 压缩中文乱码,linux下zip文件解压乱码问题的解决办法分享
  4. uniapp-自定义下拉菜单,点击选项绑定数据
  5. 工程项目计算机协同管理系统AUTODESK BUZZSAW平台在世博中心项目建设中的运用
  6. i7 1255u怎么样?相当于什么水平
  7. Java语言的主要应用领域
  8. Java应用程序的运行机制(介绍)
  9. Ubuntu下清理系统垃圾
  10. 【STM32H7教程】第92章 STM32H7的FDCAN总线应用之双FDCAN实现(支持经典CAN)