今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题。

首先详细说明下整个过程:

有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数据,然后再更新表B的两个字段,更新的两个字段是特定值。并且插入和更新在一个事务中。

有个需求需要在表A添加一个Insert的行级触发器,在触发器里,插入表A一行记录后去表B查看更新的两个字段是否满足特定条件,

如果表B的两个字段同时等于特定值,则把表A和表B的数据整合下放到表C。触发器的初衷就是这样。

可问题来了,测试触发器的时候,发现表B的两个字段总不能满足条件。查询下表B,发现表B的两个字段已经更新,并且两个都是特定值。新建测试窗口,插入表A一条测试记录,能在表C插入整合后的数据。

初步推断可能是在事务中,Insert语句先执行了,先触发了触发器,然后才进行表B的两个字段的更新。

所以就修改了Java代码事务中Insert语句和Update语句执行顺序,把Update语句放到Insert语句之前,结果还是一样,不能在表C插入整合后的数据。

后来在表B上面创建了一个Update触发器,禁用表A的Insert触发器,测试表B的Update触发器是发现当更新的两个字段满足特定条件后,去表A能查询到新插入的数据,能把整合后的数据插入到表C。

得出最终不成熟的结论:Oracle一个事务中,Insert语句比Update先执行。

最新文章

  1. Xml,Json,Hessian,Protocol Buffers序列化对比
  2. prototype 原型
  3. C#打开摄像头抓取照片然后退出
  4. Volly框架的使用基础版及使用中的一些坑 Ace 网络篇(三)
  5. java调用Http请求 -HttpURLConnection学习
  6. SLC、MLC和TLC三者的区别
  7. NOIP200902分数线划定
  8. Linux I/O Scheduler--CFQ(上)图解
  9. 201512读书分享——读《做自己的No.1》“哪一天”是永远不会到来的
  10. Windows server 2008 R2实现多用户远程连接
  11. 消息队列(Message Queue)基本概念(转)
  12. 网络性能测试工具Iperf/Jperf解读
  13. SQL SERVER 日期转换大全
  14. python实现批量压缩文件夹
  15. mysql 行转列 列转行
  16. vue 总结
  17. 常用gcc选项
  18. Leetcode笔记(整理中.......)
  19. 第十七次ScrumMeeting博客
  20. WebService 之 实例学习一

热门文章

  1. Highcharts使用教程(2):设置选项
  2. tomcat8 配置在线管理应用功能
  3. maven项目和普通项目转换
  4. 我的Android第一章
  5. windows平台整合Apache与tomcat
  6. TomTom (16Q3)数据协议基础
  7. 让PictureBox支持URL显示图片
  8. java内存泄漏的经典案例
  9. Unity3D之随心所欲的获取对象
  10. winform右下角弹窗