Oracle一个事务中的Insert和Update执行顺序
今天碰到了一个奇怪的问题,是关于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先执行。
Oracle一个事务中的Insert和Update执行顺序的更多相关文章
- 错误处理之try、catch、finally中的return、throw执行顺序。
今天遇到一个让人无语的代码块 try { bilSheetService.syncUser(bilWebseviceLog, userId, optType); }catch (Exception e ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- jquery ajax中success与complete的执行顺序
jquery ajax中success与complete的执行顺序 jquery中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) ...
- Oracle merge into 语句进行insert或者update操作,如果存在就update,如果不存在就insert
merge into的形式: MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] ...
- Oracle中Select语句完整的执行顺序
oracle Select语句完整的执行顺序: .from 子句组装来自不同数据源的数据: .where 子句基于指定的条件对记录行进行筛选: .group by子句将数据划分为多个分组: .使用聚集 ...
- SqlServer中Sql语句的逻辑执行顺序
准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...
- django中的中间件机制和执行顺序
这片文章将讨论下面内容: 1.什么是middleware 2.什么时候使用middleware 3.我们写middleware必须要记住的东西 4.写一些middlewares来理解中间件的工作过程和 ...
- Unity 脚本中的主要函数的 执行顺序及其介绍
Awake ->OnEable-> Start -> FixedUpdate-> Update -> LateUpdate ->OnGUI ->OnDisa ...
- java中return与finally的执行顺序
可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...
随机推荐
- heartbeat
http://www.bubuko.com/infodetail-1174857.html http://www.cnblogs.com/zhanjindong/p/3618055.html http ...
- MVC模式
1.MVC的概念 1.1什么是MVC? MVC是一种架构型模式,它本身不引入新的功能,只是指导我们把web应用结构做的更加合理,实现逻辑与页面相分离. ...
- CSS3 笔记五(Buttons)
Some examples 1> Input width animation Search: Code <!DOCTYPE html> <html> <head&g ...
- git使用ssh密钥
1.查看本地是否有密钥对,如果存在就删除cd ~/.sshid_dsa id_dsa.pub 2.重新生成密钥对ssh-keygen -t rsa -C "your_email@yourem ...
- C扩展python的module和Type
有许多理由给CPython写扩展,比如 1.性能低 2.重复用别人的C/C++代码 3.在自己的程序中定制python 4.为了方便 等等. 写这种扩展其实都是套路,不过最好要有对CPython源码有 ...
- androi 多线程
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- python画图设置坐标轴大小
在console端输入python语句,会一句输一行,而且不保留你所做的操作,但是每一句之间加一个分号就能很好的解决. import pylab as Plot Plot.xlim(-150, 150 ...
- memcached源码安装(linux和windows)
如果是在windows环境下编译安装,我这边是基于cygwin或msys2方式 安装cygwin环境,http://www.cnblogs.com/skey_chen/p/5765179.html 安 ...
- dubbo(转载)
1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...
- linux的三种安装软件包的方式(小白的学习之旅)
tar包,整个安装过程可以分为以下几步: 1) 取得应用软件:通过下载.购买光盘的方法获得: 2) 解压缩文件:一般tar包,都会再做一次压缩,如gzip.bz2等,所以你需要先解压.如果是最常见的g ...