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,影响都不大,改造的系统中数据量比较适中,不是太大。

posted @ 2020-12-09 11:45  一只爱阅读的程序员  阅读(1890)  评论(0编辑  收藏  举报