Oracle批量新增数据最佳实践
一、需求描述
现在的项目改造过程中,从国产的Gbase数据库改造为Oracle数据库,遇到一个问题有的业务操作需要批量新增数据。
这也是一个比较常规的操作,有很多地方确实需要一次性新增多条数据。Gbase数据库的语法和Mysql的语法大同小异,
INSERT INTO 表 (字段一,字段二,字段三) VALUES (值一,值二,值三), (值一一,值二二,值三三);可是Oracle中
可没有批量新增的语法,这怎么办呢?
二、需求分析
通过百度查找答案,找到一篇比较好的文章,https://www.cnblogs.com/azhqiang/p/8136151.html
大致意思是需要使用查询Oracle中的虚表DUAL,还有使用关键字 UNION 或者是 UNION ALL来实现。
实现的语法为 INSERT INTO 表 (字段一,字段二,字段三) SELECT 值一,值二,值三 FROM DUAL
UNION(或者) UNION ALL
SELECT 值一一,值二二,值三三 FROM DUAL;
UNION(或者) UNION ALL
SELECT 值一一一,值二二二,值三三三 FROM DUAL;
三、解决方案
找到解决方法方法后立马进行尝试,写的代码如下,

测试结果一,新增两条数据,结果正确。

测试结果二,新增一条数据,测试通过。

可是把新增一条数据的SQL拷贝一份到PLSQL中执行,却不能正确执行,报一个错:未明确定义的列。

自己经过反复排查,也在和同事进行讨论,最终确定这种批量插入方式存在问题,然后进行改进。

改进后就是去除了外层的SELECT A.*,然后再次尝试,插入一条数据或者是多条数据都能够正常新增,功能改造完成。
至于使用UNION 还是 UNION ALL,影响都不大,改造的系统中数据量比较适中,不是太大。
Oracle批量新增数据最佳实践的更多相关文章
- mybaits实现oracle批量新增数据,回填主键
项目有需求,百度了很久,反正他们说的方法,我都没成功,我也不知道是不是我写代码的姿势不正确,没办法只能自己想法子了 我们这个项目用到了通过Mapper,通用Mapper里通过OracleProvide ...
- oracle批量新增更新数据
本博客介绍一下Oracle批量新增数据和更新数据的sql写法,业务场景是这样的,往一张关联表里批量新增更新数据,然后,下面介绍一下批量新增和更新的写法: 批量新增数据 对于批量新增数据,介绍两种方法 ...
- atitit.hbnt orm db 新新增更新最佳实践o99
atitit.hbnt orm db 新新增更新最佳实践o99 1. merge跟个save了. 1 2. POJO对象处于游离态.持久态.托管态.使用merge()的情况. 1 3. @Dynami ...
- atitit.hbnt orm db 新新增更新最佳实践o7
atitit.hbnt orm db 新新增更新最佳实践o7 1. merge跟个save了. 1 2. POJO对象处于游离态.持久态.托管态.使用merge()的情况. 1 3. @Dynamic ...
- mybatis学习之路----mysql批量新增数据
原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...
- MyBatis基础入门《十三》批量新增数据
MyBatis基础入门<十三>批量新增数据 批量新增数据方式1:(数据小于一万) xml文件 接口: 测试方法: 测试结果: =============================== ...
- 使用EF批量新增数据十分缓慢
使用EF来批量新增数据,发现效率非常的差,几千条数据时甚至需要几分钟来执行,迫于无奈使用sql来执行了. 今天偶然看到一篇关于EF的文章,才发觉原来是自己对EF不够了解的原因. 一般新增时我们是将所有 ...
- 批量新增数据(BuckCopy)
批量新增数据(BuckCopy) 使用webService传输数据时要注意,Datatable中的数据类型,以及科学计数 /// <summary> /// 批量新增数据 /// < ...
- mybatis 学习笔记(4) —— 批量新增数据
1.业务是从前台传入List<T> ,在controller层接受参数,并进行批量新增操作. 2.需要处理的细节 a) mybatis可以支持批量新增,注意数据表需要将主键设置成自增列. ...
随机推荐
- WEB安全问题
WEB安全问题我没太多经验,但是这块内容还是很重要,所以必须要了解学习一下. 简单总结了一下,分成以下5类, 1.DDOS,瘫痪式攻击,解决方法是记录异常请求的ip地址,主动拒绝或者将攻击ip添加到防 ...
- vite 搭建Vue3.0项目
1.全局安装vite:npm install create-vite-app -g 2.创建项目:npx create-vite-app project-name 3.cd project-name ...
- mdp文件-Chapter3-NPT.mdp
mdp系列的第三篇,对NPT模拟中的mdp文件做一简单介绍. 先上代码 1 title = OPLS Lysozyme NPT equilibration 2 define = -DPOSRES ; ...
- select限制之文件描述符限制
1.一个进能够打开的最大文件描述符限制.可以通过两种方式修改ulimit -n :获取最大文件描述符个数ulimit -n 2048:修改为2048个 该限制的测试代码: 客户端程序: /* 1.se ...
- 爬虫练习之正则表达式爬取猫眼电影Top100
#猫眼电影Top100import requests,re,timedef get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Window ...
- 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine
双汇发展多个分厂的能源管控大数据系统主要采用两种技术栈:InfluxDB/Redis和Kafka/Redis/HBase/Flink,对于中小型研发团队来讲,无论是系统搭建,还是实施运维都非常棘手.经 ...
- python3中我所了解的print()的用法
1.最基础的用法:打印调试信息等字符串语句.而且在3里面,打印中文的时候不需要加u了. 2.打印变量 打印默认换行的: 打印出来不想要他换行的:参数end='',这样打印出来就可以不换行了,这种骚操作 ...
- 1-03 Java的基本程序设计结构
1-03 Java的基本程序设计结构 3.1 & 3.2 在一个单词中间使用大写字母的方式称为骆驼命名法.以其自身为例,应该写成CamelCase). 与C/C++一样,关键字void表示这个 ...
- 公司新来的小姐姐不懂java中的static关键字,这样给她描述不香吗?
前言 static关键字是摆在刚入行编程语言的小白们面前的一道难题,为什么要用static?使用它有什么好处?修饰方法和修饰变量有什么区别?本文将就java中static关键字的使用方法及注意事项进行 ...
- Guitar Pro使用技巧之乐段回放练习
Guitar Pro中的"回放"功能是我们在吉他练习中非常常用的一项功能.我们在吉他练习中碰到某一乐段比较练习比较困难时,我们就可以用鼠标在Guitar Pro上选中该乐段,然后进 ...