【问题标题】:bulk insert using OCI使用 OCI 进行批量插入
【发布时间】:2011-10-12 00:07:11
【问题描述】:

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

定义插入查询 对所有记录列使用 OCIBindByname() 遍历地图 将绑定变量分配为结构的属性 OCIStmt执行 结束

这很慢,所以我想通过批量插入来加快速度。有什么好方法可以做到这一点?我应该使用一组结构将所有记录插入一个 OCIStmtExecute 吗?你有任何示例代码来说明如何做到这一点?

【问题讨论】:

    标签: oracle-call-interface


    【解决方案1】:

    Here 是一些示例代码,展示了我如何在OCI*ML 中实现它。总而言之,这样做的方法是(例如对于具有一列整数的表):

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

    在我的experience 中,100 倍的加速肯定是可能的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        bulk insert example.txt
        by
        {
        delimeter=','  //  or any delimiter specified in your text files
        size=200kb //or your size of text file
        }
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-01
            • 2023-04-03
            • 1970-01-01
            • 2012-03-31
            • 2018-06-10
            • 2014-11-14
            • 2019-09-18
            • 1970-01-01
            相关资源
            最近更新 更多