Oracle数据的批量插入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据的批量插入相关的知识,希望对你有一定的参考价值。

参考技术A

  前两天接到一个需求——需要编程将SQL Server中的数据插入至Oracle 数据大约有 多万条记录 开始的时候我采取了直接构建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实现批量插入

    

  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

Oracle批量插入数据

Oracle批量插入数据

学习了:http://blog.csdn.net/chenleixing/article/details/45165761/

膜拜一下,引用原文:

那么有没有其他方法呢??答案是有的,也许熟悉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。

后期补充一下测试例子:

 

以上是关于Oracle数据的批量插入的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 批量插入数据怎么做

Oracle 批量插入数据怎么做

Oracle 批量插入数据怎么做

oracle数据库,批量插入数据脚本

Oracle批量插入数据

oracle批量插入数据