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,影响都不大,改造的系统中数据量比较适中,不是太大。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现