oracle merge into 批量新增或更新
mapper.java
/*** 批量插入或更新* @param stpos* @author fengjia* @date 2022/5/9 19:50*/void mergeInto(List<TbMmOtStpo> stpos);
mapper.xml
merge into table_name uusing(<foreach collection="list" index="index" item="item" open=""close="" separator="union">SELECT #{item.stlty} as stlty,#{item.stlnr} as stlnr,#{item.stlkn} as stlkn,#{item.stpoz} as stpoz,#{item.datuv} as datuv,#{item.andat} as andat,#{item.aedat} as aedat,#{item.idnrk} as idnrk,#{item.pswrk} as pswrk,#{item.postp} as postp,#{item.posnr} as posnr,#{item.maktx} as maktx,#{item.vornr} as vornr,#{item.stvkn} as stvkn,#{item.plnnr} as plnnr,#{item.plnkn} as plnknFROM dual</foreach>) ton (u.stlty = t.stlty and u.stlnr = t.stlnr and u.stlkn = t.stlkn and u.stpoz = t.stpoz)when matched thenupdate set u.datuv = t.datuv,u.andat = t.andat,u.aedat = t.aedat,u.idnrk = t.idnrk,u.pswrk = t.pswrk,u.postp = t.postp,u.posnr = t.posnr,u.maktx = t.maktx,u.vornr = t.vornr,u.stvkn = t.stvkn,u.plnnr = t.plnnr,u.plnkn = t.plnkn,u.updatedtime = sysdatewhen not matched theninsert (stlty,stlnr,stlkn,stpoz,datuv,andat,aedat,idnrk,pswrk,postp,posnr,maktx,vornr,stvkn,plnnr,plnkn,createdtime) VALUES(t.stlty,t.stlnr,t.stlkn,t.stpoz,t.datuv,t.andat,t.aedat,t.idnrk,t.pswrk,t.postp,t.posnr,t.maktx,t.vornr,t.stvkn,t.plnnr,t.plnkn,sysdate)
- merge into 后面跟表名
- using 更新数据,可以用union all 或者union 批量拼接数据
- on 判断更新还是插入的条件
- update 更新语句
- insert 插入语句
- 问题1:更新的数据要通过on后面的条件找到唯一一条需要更新的数据,如果on后面的条件找到多条数据,就会报错,无法判断要更新那条数据。
- 解决:暂时没有太好的解决方案,确保唯一即可。
- 问题2:批量删除插入的数据太多时,SQL报错或者JVM 栈溢出
- 解决:控制插入list的数量
if (mmOtMapls.size()>0) {//为了防止SQL语句超出长度出错,分成几次插入if(mmOtMapls.size() <= 1000){tbMmOtMaplService.mergeInto(mmOtMapls);}else{int times = (int)Math.ceil( mmOtMapls.size()/1000.0 );for(int i=0; i< times; i++ ){tbMmOtMaplService.mergeInto(mmOtMapls.subList(i * 1000, Math.min((i + 1) * 1000, mmOtMapls.size())));}}}
可参考
https://blog.csdn.net/weixin_43303530/article/details/108495327
oracle merge into 批量新增或更新相关推荐
- oracle应用之批量新增更新数据
本博客介绍一下Oracle批量新增数据和更新数据的sql写法,业务场景是这样的,往一张关联表里批量新增更新数据,然后,下面介绍一下批量新增和更新的写法: 批量新增数据 对于批量新增数据,介绍两种方法 ...
- linq to object 、linq to sql 、linq to entity 批量 新增、更新、删除功能扩展
最近在codeplex上找到了一个功能比较全的linq to object .linq to sql .linq to entity新增.修改.删除功能扩展的控件--magiq. 以linq to s ...
- oracle事务提交前更新机制,Oracle 事务机制 批量添加,修改,更新
---------------------------------------------------------------------------------------------2011-12 ...
- oracle批量将id更新为uuid,oracle批量新增更新数据
本博客介绍一下Oracle批量新增数据和更新数据的sql写法,业务场景是这样的,往一张关联表里批量新增更新数据,然后,下面介绍一下批量新增和更新的写法: 批量新增数据 对于批量新增数据,介绍两种方法 ...
- ORACLE 数据同步时,批量进行新增和更新操作的SQL写法
场景模拟:比如自己项目的一张EMP员工信息表,数据来源需要从第三方系统获取,随时可手动同步更新,也可以定时自动同步.一般情况下,通过创建时间或者最后更新时间,获取自上次同步后的数据增量,全部插入本地的 ...
- 基于ruoyi+vue+elementUI实现列表,新增,附件上传,tab+springBoot+mybatis+oracle序列+批量新增
基于ruoyi+vue+elementUI实现列表,新增,附件上传,tab+springBoot+mybatis+oracle序列+批量新增 页面效果 列表页面 新增页面 详情页面 代码实现 列表+新 ...
- oracle批量新增字段工具,mybatis 中oracle 批量新增三种方法
第一种 < insert id =" insert_table " parameterClass ="java.util.List" > ins ...
- mybatis批量新增和批量更新的效率对比
今天,为了更多了解下,mybatis批量新增和批量更新在simple/batch模式 + MySQL的rewriteBatchedStatements下效率有什么区别,做了一次实验. 实验结果,让人意 ...
- MyBatis + Oracle 实现批量新增和批量修改
MyBatis + Oracle 实现批量新增(基于序列化自增长主键) mapper 接口 void batchInsert(List<ASingleProject> list); map ...
最新文章
- pythonbyte连接_Python3之字节串bytes与字节数组bytearray的使用详解
- 被忽视的 Application
- 引用可以是void类型吗?
- python求最大连续子数组
- 再见,Navicat!这个 IDEA 的兄弟,真香!
- 4.jenkins 添加一台 Linux 服务器
- C# NFine开源框架 调用存储过程的实现代码
- python-回调函数
- 初中中考计算机考试,中考信息技术考试
- 常用web服务器架构理解
- 排兵布阵问题java语言_hdu 4539 郑厂长系列故事——排兵布阵
- 41.clip-path 滚动特效
- 公众号小额打款验证_已经注册完的公众号如何进行小额打款验证。?
- JZOJ4788. 序列
- Switch开关,两边字隐藏
- Golang如何实现排序
- 宝塔 控制面板如何添加新网站
- 【CIKM 2021】推荐系统相关论文分类
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- Burp Suite进行账号密码爆破