在没有存储过程/避免循环的Oracle表10g中批量插入

时间:2013-06-26 18:46:57

标签: c# xml database oracle datatable

我有一个包含3列ID (int), Name (string), Status (string)和1000行的数据表..以及一个包含4列seq的表格(由SEQR.NEXTVAL生成),ID,{{ 1}},Name

我想在一个查询中插入所有1000行。我的意思是避免使用循环数据库命中1000次来解决性能问题。

约束是:

  1. 我正在使用Oracle 10g
  2. 存储过程,不允许使用游标
  3. 允许临时表创建,因为DBA来自客户端,因此我无法从我这边创建数据库表
  4. 有正确代码的任何建议吗?我正在使用Oracle客户端和Status对象

3 个答案:

答案 0 :(得分:2)

所以只使用一个SQL语句,对吗?

insert into table_a (seq_col, id, name, status)
select seqr.nextval, id, name, status
from table_b;

答案 1 :(得分:0)

如果我正确理解了您的问题,您可以在insert语句中使用Select语句:

Insert into table2
  Select SEQR.NEXTVAL, tab1.*
    from table1 as tab1

答案 2 :(得分:0)

使用Oracle数组DML。您只需从代码中循环填充列数组,并将所有内容作为单个INSERT语句发送。 无论如何,使用绑定变量正确编写查询的IMHO 1000 INSERT不会遇到性能问题。如果你不使用绑定变量并且每次提交都会得到它们......