Oracle資料的批量插入

2021-06-26 11:53:43 字數 3806 閱讀 8213

前兩天接到乙個需求——需要程式設計將sql server中的資料插入至oracle。資料大約有20多萬條記錄。開始的時候我採取了直接構建sql插入的方式,結果耗時太長。為了提高效能我上網找了資料。最終採用dataadapter批量插入至oracle,提高了效能。

**如下:

一,直接構建sql語句插入

vb.net

1  sw.start()

2  ''''read z02j from sql server

3  dim sqlcmd as new sqlcommand()

4  sqlcmd.connection = sqlconnection

5  sqlcmd.commandtext = "select * from  z02j"67 

dim sqldr as sqldatareader

8  sqldr = sqlcmd.executereader()

910 

dim cmdinsertz02j as new oraclecommand()

11  cmdinsertz02j.connection = oraconnection

12  cmdinsertz02j.commandtext = buildsqlstatement(sqltype.insert,"z02j")

14  dim plantlever, material, oldmaterialnum, materialdescription as object

15  while sqldr.read()

16  plantlever = readsqldatareader(sqldr, 0, "")

17  material = readsqldatareader(sqldr, 1, "")

18  oldmaterialnum = readsqldatareader(sqldr, 2, "")

19  materialdescription = readsqldatareader(sqldr, 3, "")

20  ''insert to oracle table z02j

21  cmdinsertz02j.parameters.addwithvalue(":plantlever", plantlever)

22  cmdinsertz02j.parameters.addwithvalue(":material", material)

23  cmdinsertz02j.parameters.addwithvalue(":oldmaterialnum", oldmaterialnum)

24  cmdinsertz02j.parameters.addwithvalue(":materialdescription", materialdescription)

25  cmdinsertz02j.executenonquery()

26  end while

27  sw.stop()

28  loger.info("reading z02j form sql sever used", sw.elapsed.totalseconds.tostring())

二,採用dataadapter實現批量插入

vb.net

1  sw.start()

2  ''''read z02j from sql server

3  dim sqlcmd as new sqlcommand()

4  sqlcmd.connection = sqlconnection

5  sqlcmd.commandtext = "select * from  z02j"67 

dim sqldr as sqldatareader

8  sqldr = sqlcmd.executereader()

910 

dim cmdinsertz02j as new oraclecommand()

11  cmdinsertz02j.connection = oraconnection

12  cmdinsertz02j.commandtext = buildsqlstatement(sqltype.insert,"z02j")

14  dim dtsqlz02j as new datatable

15  dtsqlz02j.columns.add("plantlever")

16  dtsqlz02j.columns.add("material")

17  dtsqlz02j.columns.add("oldmaterialnum")

18  dtsqlz02j.columns.add("materialdescription")

20  dim plantlever, material, oldmaterialnum, materialdescription as object

21  while sqldr.read()

22  plantlever = readsqldatareader(sqldr, 0, "")

23  material = readsqldatareader(sqldr, 1, "")

24  oldmaterialnum = readsqldatareader(sqldr, 2, "")

25  materialdescription = readsqldatareader(sqldr, 3, "")

26  dtsqlz02j.rows.add(plantlever, material, oldmaterialnum, materialdescription)

27  end while

28  sw.stop()

29  loger.info("reading z02j form sql sever used", sw.elapsed.totalseconds.tostring())

31  sw.start()

32  dim orada as new oracledataadapter()

33  orada.insertcommand = cmdinsertz02j

34  orada.insertcommand.parameters.add(":plantlever", oracletype.char, 255, "plantlever")

35  orada.insertcommand.parameters.add(":material", oracletype.char, 255, "material")

36  orada.insertcommand.parameters.add(":oldmaterialnum", oracletype.char, 255, "oldmaterialnum")

37  orada.insertcommand.parameters.add(":materialdescription", oracletype.char, 500, "materialdescription")

39  orada.insertcommand.updatedrowsource = updaterowsource.none

40  orada.updatebatchsize = 20 

'''adjust the batch size based on testing result

42  orada.update(dtsqlz02j)

43  sw.stop()

44  loger.info("insert to oracle used", sw.elapsed.totalseconds.tostring())

在我的環境中批量插入24萬筆記錄用時大約260s左右。

貌似sql server中。net驅動程式提供了sqlbulkcopy類來提高大量資料匯入的效能。有需要的朋友可以查

批量插入資料 Oracle

在使用 oracle 開發期間,或許我們會為編寫一條一條插入語句而困惱,這裡給出 對資料表進行簡單批量插入的例子。以下均是oracle 資料庫操作 insert into cbay user t userid,username,password,userage select test1 test1 ...

oracle批量插入資料

值是可以省略的 插入到表名 列值 後跟乙個查詢語句的話就代表值,簡單的說就是後面select select出來的值就是要插入的值,即 insert into tb 欄位名一,欄位名二 select 欄位名一,欄位名二 from tb 等於insert into tb 欄位名一,欄位名二 values...

Oracle批量插入資料

insert all into tab id,name values 1,amy into tab id,name values 2,tom into tab id,name values 3,jerry select 1 from dual insert all不支援生產id declare i ...