十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
Oracle批量插入數(shù)據可用PL/SQL的命令窗口執(zhí)行。
寬甸ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
使用工具:PL/SQL
步驟:
1、登錄PL/SQL到指定數(shù)據庫。
2、登錄后,點擊左上方“紙片”狀圖標,然后選擇“Command
Window”選項,進入命令窗口。
3、然后在本地電腦編寫insert(即插入語句),每句以逗號分隔。如圖:
4、然后為文件起名字,以.sql為文件后綴,如“執(zhí)行.sql”,保存到指定路徑,如
c盤
data目錄下。
5、在打開的命令窗口下執(zhí)行如下語句:
1
@c:\data\執(zhí)行.sql
其中“@”為必寫內容,“c:\data\”為sql文件保存路徑,“執(zhí)行.sql”為要執(zhí)行的腳本文件名。
6、敲擊
回車鍵
執(zhí)行,執(zhí)行后會有成功提示,如圖:
7、最后去目標表查詢數(shù)據,檢驗結果成功。其中如圖的四條為新插入的數(shù)據。
使用loop循環(huán),比如:
for item in (select a,b,c from table_a where 條件) loop
insert into table_b(a,b,c) values (item.a,item.b,item.c);
end loop;
也可以使用索引表循環(huán),以上只是一個簡單的例子,需要根據你的具體情況選擇循環(huán)方式。
1、采用insert into values 語句插入一條,寫很多條語句即可多條數(shù)據,這種主要針對于離散值以及一些基礎信息的錄入,如:insert into test(xh,mc) values('123','測試');
如果插入的數(shù)據有規(guī)律,可利用for、loop循環(huán)插入,主要用于批量生成測試數(shù)據
begin
for i in 1 .. 100 loop
insert into test(xh,mc) values(i||'','測試');
end loop;
end ;。
2、采用insert into selct from 語句來一次性插入一個集合,這種主要依據于要插入的數(shù)據源已經存儲于數(shù)據庫對象中,或者利用dual虛表來構造數(shù)據,經過加工后寫入一個集合。
insert into test (xh,mx) select '123','測試' from dual;
3、采用plsql等工具、或者oracle的imp、impdp命令來導入,這種主要用數(shù)據庫與數(shù)據庫之間的大批量數(shù)據導入,導入的數(shù)據格式為plsql的pde、oracle的dmp等。dmp文件可使用
table_exists_action參數(shù)控制導入動作:replace替換原表,truncate清除原表數(shù)據再導入,append增量導入數(shù)據,當然impdp數(shù)據泵的導入要依賴于directory路徑。
impdp 用戶名/密碼 dumpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append。
4、使用excel文件直接拷貝。這種主要用于要寫入的數(shù)據已是excel文件或者行列分明的其它格式文件,每一列的值和表結構相對應,可直接打開表的行級鎖,把數(shù)據拷貝進入。
前兩天接到一個需求——需要編程將SQL Server中的數(shù)據插入至Oracle 數(shù)據大約有 多萬條記錄 開始的時候我采取了直接構建SQL插入的方式 結果耗時太長 為了提高性能我上網找了資料 最終采用DataAdapter批量插入至Oracle 提高了性能
代碼如下
一 直接構建SQL語句插入
VB NET
sw Start()
Read Z J from SQL Server
Dim sqlCmd As New SqlCommand()
sqlCmd Connection = sqlConnection
sqlCmd CommandText = SELECT * FROM? Z J
Dim sqlDr As SqlDataReader
sqlDr = sqlCmd ExecuteReader()
Dim cmdInsertZ J As New OracleCommand()
cmdInsertZ J Connection = oraConnection
cmdInsertZ J CommandText = BuildSQLStatement(SQLType Insert z j )
Dim plantLever material oldMaterialNum materialDescription As Object
While sqlDr Read()
?plantLever = ReadSqlDataReader(sqlDr )
material = ReadSqlDataReader(sqlDr )
oldMaterialNum = ReadSqlDataReader(sqlDr )
materialDescription = ReadSqlDataReader(sqlDr )
Insert to Oracle table Z J
cmdInsertZ J Parameters AddWithValue( :plantLever plantLever)
cmdInsertZ J Parameters AddWithValue( :material material)
cmdInsertZ J Parameters AddWithValue( :oldMaterialNum oldMaterialNum)
cmdInsertZ J Parameters AddWithValue( :materialDescription materialDescription)
cmdInsertZ J ExecuteNonQuery()
End While
sw Stop()
Loger Info( Reading z j form sql sever used sw Elapsed TotalSeconds ToString())
二 采用DataAdapter實現(xiàn)批量插入
VB NET
sw Start()
Read Z J from SQL Server
Dim sqlCmd As New SqlCommand()
sqlCmd Connection = sqlConnection
sqlCmd CommandText = SELECT * FROM? Z J
Dim sqlDr As SqlDataReader
sqlDr = sqlCmd ExecuteReader()
Dim cmdInsertZ J As New OracleCommand()
cmdInsertZ J Connection = oraConnection
cmdInsertZ J CommandText = BuildSQLStatement(SQLType Insert z j )
Dim dtSqlZ J As New DataTable
dtSqlZ J Columns Add( plantLever )
dtSqlZ J Columns Add( material )
dtSqlZ J Columns Add( oldMaterialNum )
dtSqlZ J Columns Add( materialDescription )
Dim plantLever material oldMaterialNum materialDescription As Object
While sqlDr Read()
plantLever = ReadSqlDataReader(sqlDr )
material = ReadSqlDataReader(sqlDr )
oldMaterialNum = ReadSqlDataReader(sqlDr )
materialDescription = ReadSqlDataReader(sqlDr )
dtSqlZ J Rows Add(plantLever material oldMaterialNum materialDescription)
End While
sw Stop()
Loger Info( Reading z j form sql sever used sw Elapsed TotalSeconds ToString())
sw Start()
Dim oraDa As New OracleDataAdapter()
oraDa InsertCommand = cmdInsertZ J
oraDa InsertCommand Parameters Add( :plantLever OracleType Char plantLever )
oraDa InsertCommand Parameters Add( :material OracleType Char material )
oraDa InsertCommand Parameters Add( :oldMaterialNum OracleType Char oldMaterialNum )
oraDa InsertCommand Parameters Add( :materialDescription OracleType Char materialDescription )
oraDa InsertCommand UpdatedRowSource = UpdateRowSource None
oraDa UpdateBatchSize = ??? Adjust the batch size based on testing result
oraDa Update(dtSqlZ J)
sw Stop()
lishixinzhi/Article/program/Oracle/201311/18480