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,影響都不大,改造的系統中數據量比較適中,不是太大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM