1. 程式人生 > >oracle如何insert into 多個values

oracle如何insert into 多個values

稍微熟悉Oracle的都知道,如果我們想一條SQL語句向表中插入多個值的話,如果如下語句

INSERT INTO 某表 VALUES(各個值),VALUES(各個值),.....;

這樣會報錯的,因為oracle是不支援這種寫法的,如果多個INSERT INTO VALUEES(各個值);這樣以“;”隔開一同執行也是不行的,oracle也是不支援的。

       不過MySQL這兩種方式都是支援的。在MySQL中還可以使用如下格式的插入語句:

複製程式碼
示例:
insert into persons 
(id_p, lastname , firstName, city )
values
(200,'haha
' , 'deng' , 'shenzhen'), (201,'haha2' , 'deng' , 'GD'), (202,'haha3' , 'deng' , 'Beijing');
複製程式碼

這樣就批量插入資料了

       SQL Server也是不支援這兩種寫法的。

       然而,有時我們在開發過程中,如果是用的oracle資料庫的話,有時很需要這種“INSERT INTO  某表” 一次效能插入多個值這樣的功能,但oracle又不支援以上兩種方式那麼我們怎麼辦?是的可能你很機靈的想到了幾種方法,如儲存過程,或著INSERT INTO 某表 SELECT * FROM 某個表等,不過宣告一下,我們在此不探討這些方法,而且都有一定的侷限性,有時我就要插入指定的幾個值,而且一條SQL語句完成,儲存過程的話,萬不得已,建議大家不要使用,當然這個根據情況而定,可以讀讀這個部落格

儲存過程的優缺點,分析的很詳細。

       那麼有沒有其他方法呢?答案是肯定有的,也許熟悉oracle資料庫的可能知道從oracle9i版本以後,可以使用一種方法即:

"INSERT ALL INTO  a表
VALUES(各個值)  
INTO a表 VALUES (其它值) 
INTO a表 VALUES(其它值) ....再跟一個SELECT 語句"。

後邊跟的SELECT 語句我們可以從虛擬表裡查如 SELECT 1 FROM DUAL。注意後邊跟的SELECT語句可以隨意,不過不是把它SELECT出來的內容插入前邊的表裡,而是起到前邊的多個數據每次插入多少行的作用,這個多少行是和後邊跟的SELECT語句查出來幾條而定的,如後邊的跟的SELECT 語句查出了15條記錄,那麼前邊的"INSERT ALL INTO  a表 VALUES(各個值1)  INTO a表 VALUES (其它值2) INTO a表 VALUES(其它值3)

"就會先插入值1對應的各個欄位插入15條記錄,然後插入值2各個對應的欄位15條記錄,然後插入值3對應的各個欄位15條記錄,也就是說有點按列插入的意思。

       我們要的是批量插入多個VALUES這樣的一條記錄,所以後邊的SELECT 語句只要能查出一條記錄就行,建議大家後邊用SELECT 1 FROM DUAL

       下邊看一個例子,一目瞭然,一看就會用了:

        OK了,我們實現了沒用儲存過程用一條SQL語句完成了向oracle的表中插入多個指定的值。也許你會問這有啥用處,告訴你,如果你在一定情況下用到它,作用就大了,避免了寫複雜而又沒必要寫的儲存過程,避免了執行多個SQL語句多次連線資料庫的開銷,當你知道了學到了,遇到問題用的時候就會明白了,不過鄙人不才,對資料庫瞭解不深,如果你覺得說的沒有道理或者你有更好的點子或者方法,非常歡迎留言交流,以便您,我,還有大家,共同的學習與成長!

出處:http://blog.csdn.net/chenleixing/article/details/45165761/

=======================================================

對於以上方法本人親測如下:

環境:

PL/SQL Developer Version 9.0.0.1601

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

測試用表:jack_20170206_aa

複製程式碼
insert all 
 into jack_20170206_aa values('4014033')
 into jack_20170206_aa values('4065304')
 into jack_20170206_aa values('4088136')
 into jack_20170206_aa values('4092405')
select 1 from dual;
複製程式碼

因為我的表裡只有一個欄位,所以就沒有寫出欄位名來。

如果插入的不是全部欄位,也可以使用下面的形式:

insert into sc(sno,cno) values('95020','1')

相關推薦

oracle到底能不能insert into values!?

         稍微熟悉oracle的都知道,如果我們想一條SQL語句向表中插入多個值的話,如果INSERT INTO 某表 VALUES(各個值),VALUES(各個值),.....;這樣會報錯的

oracle如何insert into values

稍微熟悉Oracle的都知道,如果我們想一條SQL語句向表中插入多個值的話,如果如下語句 INSERT INTO 某表 VALUES(各個值),VALUES(各個值),.....; 這樣會報錯的,因為oracle是不支援這種寫法的,如果多個INSERT INTO VALUEES(各個值);這樣以“;”隔開一

select into 值 為空

select into 為空和多個值: 1、異常處理法 將 select ... into ............; 的地方改寫成: begin     select ... into ............; exception    when no_data_fou

JavaScript庫使用 $ 號的命名沖突問題

多個 script 一個 對象 conflict onf java read 調用 多個JavaScript庫使用 $ 號的命名沖突問題:  1. 為解決這個問題,jQuery 提供了一個 jQuery.noConflict() 方法,調用該方法可以把對 $ 標

nginx 配置主機

安裝 code -a reload res list onf 內容 efault 我現在想配置 兩個站點,通過域名來區分訪問不同的網站目錄 比如有個域名 baidu.com 第二個域名 google.com,我有兩個網站目錄, /opt/web/baidu;

如何同時對表或列操作

lac procedure states lag nds 過濾 遊標 字符 ret 通過使用這個存儲過程,你就可以方便的對數據庫中具有一定規則的或者全部表,對這裏的字段進行各種操作,具體看示例! CREATE PROCEDURE SP_execSQLonDB (@T

SQL Cookbook:操作

規則 原因 解決 pre nio union all logs 使用 所有 1、記錄集的疊加 使用union all union all包含重復的結果,union篩選掉重復項(可能需要排序) 1 select * from film where film_id <

三星又推出新工具啦!Gear VR 可以兼容視頻

遺憾 測試版 啟動 obi 美國 alt 開發 大小 電池 (52VR開發網2017年5月5日訊)Gear VR的專用Netflix應用程序是傳統2D內容可以在VR中工作的很好的展示,但缺點是僅適用於一個視頻服務。 不過,三星本身的一款新應用推出了類似的應用程序帶入頭顯。

python系列(五)centos6.x中部署python版本

python pyenv centos6.x virtualenv 博主QQ:819594300博客地址:http://zpf666.blog.51cto.com/有什麽疑問的朋友可以聯系博主,博主會幫你們解答,謝謝支持!使用pyenv+virtualenv方式部署python多版本pyenv

logstash 創建索引

logstash1、server.conf文件[[email protected]/* */ bin]$ cat server.conf input { redis { host => "10.10.45.200"

如何將字符串分割賦值給shell變量

lock ext shell變量 宋體 for prev spa str -a 如何將字符串分割賦值給多個shell變量shellTarget Target 比如字符串"111|222|333"分割分別賦值給三個shell變量 $ a=‘111|222|333

Fragment界面重疊和拍照閃退問題

map() 拉取 圖片 getheight eat details directory 實例化 ict 記錄最近遇到的多個Fragment界面重疊和調用系統相機拍照閃退問題,同時總結解決方案。 ----------------------------------------

轉-eclipse管理workspace

nbsp 說明 就會 項目 常用 itl 鼠標 targe 打開 Eclipse作為Java開發中最常用的開發工具,大家都很熟悉了,但是,當你做過很多項目後你會發現你的eclipse的package explorer視圖下顯示的project超級多,這時你可能會關閉一些不經

在一個進程中定義線程

daemon 之前 args 設置 tar main art blog thread import threadingfrom time import ctime,sleepimport timedef music(name): print(‘listening to

在struts2中配置自定義攔截器放行方法

return med ttr limit ring req tac cat invoke 源碼: 自定義的攔截器類: //自定義攔截器類:LoginInterceptor ; package com.java.action.interceptor; import j

wampserver 安裝php版本號報錯之關鍵問題

amp rec released detail receive duang 之前 報錯 onf 近期喜歡上用wampserver來搭建php本地執行環境 主要是一鍵安裝 特easy 之前一直用的是 appserv 也挺好用的 用了wamp後 才發現wamp

python基礎一 ------如何獲取字典相同的鍵

class dom 集合 pre app wke 生成 參數 tool 需求: 足球賽第一場進去統計 {"A":3,"B":2,"C":1}足球賽第二場進去統計 {"A":3,"C":1}足球賽第二場進去統計 {"A":2,"B":2}統計每場都有進球的人----&g

切面表達式

cati port tro end mvc 表達式 class ring source <?xml version="1.0" encoding="utf-8"?> <beans default-init-method="init" default-de

.net Kafka.ClientConsumer Group對Topic消費不能完全覆蓋研究總結(二)

eight 分享 stat .com ima topic consumer 閱讀 padding 依據Partition和Consumer的Rebalance策略,找到Kafka.Client Rebalance代碼塊,還原本地環境,跟蹤調試,發現自定義Consumer G

[C/C++] multimap查找一個key對應的value

out blog urn -h multimap 叠代器 find code range 在multimap中,同一個鍵關聯的元素必然相鄰存放。基於這個事實,就可以將某個鍵對應的值一一輸出。 1、使用find和count函數。count函數求出某個鍵出現的次數,find函數