3

我目前正在使用 OCI 从 C++ 代码中将记录一个接一个地插入到表中。数据在结构的哈希映射中,我遍历映射的元素,将结构的属性绑定到表中记录的列(例如

定义插入查询 对记录的所有列使用 OCIBindByname( ) 迭代映射分配绑定变量作为结构 OCIStmtExecute 的属性 end

这很慢,所以我想通过批量插入来加快速度。有什么好方法可以做到这一点?我应该使用一个结构数组在一个 OCIStmtExecute 中插入所有记录吗?您是否有任何示例代码显示如何执行此操作?

4

4 回答 4

2

是一些示例代码,展示了我如何在OCI*ML中实现它。总之,执行此操作的方法是(例如对于具有一列整数的表):

  1. malloc()sizeof(int)× 行数的内存块并填充它。这可能是一个数组。
  2. OCIBindByPos()用那个指针*valuep和大小调用value_sz.
  3. 调用OCIStmtExecute()iters设置为步骤 1 中的行数

以我的经验,100 倍的加速肯定是可能的。

于 2011-11-07T13:18:43.913 回答
1

您可能想要做的是“批量插入”。数组中的批量插入是通过使用 ArrayBinds 完成的,您将第一行的数据与数组的第一个结构绑定并设置跳转,这通常是结构的大小。在此之后,您可以使用数组数量执行语句。多个绑定将产生开销,因此使用批量插入。

于 2011-10-18T22:06:25.517 回答
1
bulk insert example.txt
by
{
delimeter=','  //  or any delimiter specified in your text files
size=200kb //or your size of text file
}
于 2015-05-07T07:44:52.010 回答
0

使用 DPL(直接路径加载)。有关详细信息,请参阅docs.oracle.com

于 2019-07-23T11:43:24.260 回答