我目前正在使用OCI从C ++代码逐个插入记录。数据在结构的散列图中,我遍历地图的元素,将结构的属性绑定到表中记录的列(例如。
定义插入查询 对所有记录列使用OCIBindByname() 迭代地图 将绑定变量指定为struct的属性 OCIStmtExecute 端
这很慢,所以我想通过批量插入加快速度。有什么好办法呢?我应该使用struct数组来在一个OCIStmtExecute中插入所有记录吗?你有任何示例代码显示如何执行此操作吗?
答案 0 :(得分:2)
Here是一些示例代码,展示了我如何在OCI*ML中实现此功能。总之,执行此操作的方法是(例如,对于具有一列整数的表):
malloc()
内存块sizeof(int)
×行数并填充它。这可能是一个数组。 OCIBindByPos()
的指针和*valuep
的大小调用value_sz
。OCIStmtExecute()
并将iters
设置为步骤1中的行数在我的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。