使用 OCI 批量插入

发布于 2024-12-09 05:37:59 字数 262 浏览 0 评论 0原文

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

定义插入查询 对记录的所有列使用 OCIBindByname( ) 迭代地图 将绑定变量分配为结构体的属性 OCIStmt执行 这非常慢

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

I am currently inserting records one-by-one into a table from C++ code using OCI. The data is in a hashmap of structs, I iterate over the elements of the map, binding the attributes of the struct to the columns of a record in the table (e.g.

define insert query
use OCIBindByname( ) for all the columns of record
iterate over map
assign bind variables as attributes of the struct
OCIStmtExecute
end

This is pretty slow, so I'd like to speed up by doing a bulk insert. What is a good way to do this? Should I use an array of struct to insert all the records in one OCIStmtExecute? Do you have any example code which shows how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

猥琐帝 2024-12-16 05:37:59

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

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

在我的 经验,100倍的加速当然是可能的。

Here is some sample code showing how I implemented this in OCI*ML. In summary, the way to do this is (say for a table with one column of integers):

  1. malloc() a block of memory of sizeof(int) × the number of rows and populate it. This could be an array.
  2. Call OCIBindByPos() with that pointer for *valuep and the size for value_sz.
  3. Call OCIStmtExecute() with iters set to the number of rows from step 1

In my experience, speedups of 100× are certainly possible.

别靠近我心 2024-12-16 05:37:59

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

What you probably want to do is 'bulk inserts'. Bulk inserts in array are done by using ArrayBinds where you bind the data of the first row with the first structure of the array and set jumps, which generally is size of structure. After this you can just do statement execute with number of arrays. Multiple binds will create overheads, hence bulk inserts are used.

小情绪 2024-12-16 05:37:59
bulk insert example.txt
by
{
delimeter=','  //  or any delimiter specified in your text files
size=200kb //or your size of text file
}
bulk insert example.txt
by
{
delimeter=','  //  or any delimiter specified in your text files
size=200kb //or your size of text file
}
不必在意 2024-12-16 05:37:59

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

Use DPL(Direct Path Loading).
Refer to docs.oracle.com for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文