我目前使用OCI从C++代码中将记录逐个插入表中。该数据位于结构的散列图中,我迭代地图的元素,将结构的属性绑定到表中的记录列(例如:使用OCI的批量插入
定义插入查询 使用OCIBindByname()在地图上记录 迭代列 分配绑定变量与结构 的属性OCIStmtExecute 结束
这是相当缓慢的,所以我想通过做批量插入加快,什么是做一个好办法这个?我应该使用一个结构数组插入一个OCIStmtExecute中的所有记录吗?你有任何示例代码显示如何做到这一点?
我目前使用OCI从C++代码中将记录逐个插入表中。该数据位于结构的散列图中,我迭代地图的元素,将结构的属性绑定到表中的记录列(例如:使用OCI的批量插入
定义插入查询 使用OCIBindByname()在地图上记录 迭代列 分配绑定变量与结构 的属性OCIStmtExecute 结束
这是相当缓慢的,所以我想通过做批量插入加快,什么是做一个好办法这个?我应该使用一个结构数组插入一个OCIStmtExecute中的所有记录吗?你有任何示例代码显示如何做到这一点?
你可能想要做的是'批量插入'。数组中的批量插入是通过使用ArrayBinds完成的,其中您将第一行的数据与数组的第一个结构绑定在一起,并设置跳转,这通常是结构的大小。在此之后,您可以执行数组数量的语句执行。多重绑定会创建开销,因此使用批量插入。
Here是一些示例代码,显示了我在OCI*ML中如何实现这个功能。总之,要做到这一点的方式是(比如对表的一个整数列):
malloc()
的sizeof(int)
×行数和填充它的内存块。这可能是一个数组。OCIBindByPos()
,指针为*valuep
,尺寸为value_sz
。OCIStmtExecute()
与iters
设定的行数从步骤1在我experience,100 ×的加速当然是可能的。
诈骗插入由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