使用OCI进行批量插入

时间:2011-10-12 00:07:12

标签: oci

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

定义插入查询 对所有记录列使用OCIBindByname() 迭代地图     将绑定变量指定为struct的属性     OCIStmtExecute 端

这很慢,所以我想通过批量插入加快速度。有什么好办法呢?我应该使用struct数组来在一个OCIStmtExecute中插入所有记录吗?你有任何示例代码显示如何执行此操作吗?

4 个答案:

答案 0 :(得分:2)

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

  1. malloc()内存块sizeof(int)×行数并填充它。这可能是一个数组。
  2. 使用OCIBindByPos()的指针和*valuep的大小调用value_sz
  3. 调用OCIStmtExecute()并将iters设置为步骤1中的行数
  4. 在我的experience中,100倍的加速肯定是可能的。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

bulk insert example.txt
by
{
delimeter=','  //  or any delimiter specified in your text files
size=200kb //or your size of text file
}

答案 3 :(得分:0)

使用DPL(直接路径加载)。 有关更多信息,请参见docs.oracle.com