2011-10-12 81 views
3

我目前使用OCI从C++代码中将记录逐个插入表中。该数据位于结构的散列图中,我迭代地图的元素,将结构的属性绑定到表中的记录列(例如:使用OCI的批量插入

定义插入查询 使用OCIBindByname()在地图上记录 迭代列 分配绑定变量与结构 的属性OCIStmtExecute 结束

这是相当缓慢的,所以我想通过做批量插入加快,什么是做一个好办法这个?我应该使用一个结构数组插入一个OCIStmtExecute中的所有记录吗?你有任何示例代码显示如何做到这一点?

回答

1

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

2

Here是一些示例代码,显示了我在OCI*ML中如何实现这个功能。总之,要做到这一点的方式是(比如对表的一个整数列):

  1. malloc()sizeof(int) ×行数和填充它的内存块。这可能是一个数组。
  2. 拨打电话OCIBindByPos(),指针为*valuep,尺寸为value_sz
  3. 呼叫OCIStmtExecute()iters设定的行数从步骤1

在我experience,100 ×的加速当然是可能的。

1

诈骗插入由enter code here example.txt中enter code here {enter code here 分隔符= '' //或任何分隔符specifiedin的文本文件enter code here 大小= 200KB //或文本文件的大小enter code here } enter code here

bilk insert example.txt 
 
by 
 
{ 
 
delimeter=',' // or any delimeter specifiedin your text files 
 
size=200kb //or your size of text file 
 
}

enter code here