在没有存储过程/避免循环的情况下在Oracle表10g中大容量插入

本文关键字:Oracle 10g 插入 大容量 情况下 循环 存储过程 | 更新日期: 2023-09-27 18:20:11

我有一个由3列ID (int), Name (string), Status (string)和1000行组成的数据表。。以及具有4列seq(由SEQR.NEXTVAL生成)、IDNameStatus的表。

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

限制条件是:

  1. 我正在使用Oracle 10g
  2. 存储过程,不允许使用游标
  3. 允许DBA临时创建表是从客户端创建的,所以我不能从我这边创建DB表

有没有合适的代码建议?我使用的是Oracle客户端和DbCommand对象

在没有存储过程/避免循环的情况下在Oracle表10g中大容量插入

所以只使用一条SQL语句,对吧?

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

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

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

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