2011-10-12 82 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