[英]bulk write in an Oracle database with OCCI c++
我是 occi 的 oracle 數據庫的新手。
我想知道如何在我的 C++ 代碼中使用 occi 一次插入多行?
int createStatement(Connection* i_pDBConn)
{
int retVal = SUCCESS;
try
{
m_pDBStmt = i_pDBConn->createStatement("INSERT INTO RATED_EVENT_EPM VALUES (:1, :2, :3, :4, :5)");
}
catch(SQLException& ex)
{
cout<<__FILE__<<":"<<__LINE__<<" "<<ex.getMessage()<<endl;
retVal = FAILURE;
return retVal;
}
m_pDBStmt->setMaxIterations(1000);
m_pDBStmt->setMaxParamSize(1, 10);
return retVal;
}
int insertRatedEventDetailInDB(Connection* i_pDBConn, string i_string)
{
int retVal = SUCCESS;
try
{
m_pDBStmt->setString(1, i_string);
if((0 != m_pDBStmt->getCurrentIteration()) && 0 == (m_pDBStmt->getCurrentIteration()%1000))
{
m_pDBStmt->executeUpdate();
i_pDBConn->commit();
}
else
{
m_pDBStmt->addIteration();
}
}
catch(SQLException& ex)
{
cout<<__FILE__<<":"<<__LINE__<<" "<<ex.getMessage()<<endl;
retVal = FAILURE;
}
return retVal;
}
所以在創建語句單次之后,然后多次調用“insertRatedEventDetailInDB”函數來多次插入行,並且需要每1000次執行一次。
看起來您正在尋找 executeArrayUpdate():
如果所有數據都通過 setDataBuffer() 方法或輸出流提供(即,除了 setDataBuffer() 或 getStream() 之外沒有 setxxx() 方法被調用),那么有一種簡化的迭代執行方式。
在這種情況下,您不應調用 setMaxIterations() 和 setMaxParamSize()。 相反,使用適當大小的數組為每個參數調用 setDataBuffer() 或 getStream() 方法以為每次迭代提供數據,然后是 executeArrayUpdate(int arrayLength) 方法。 arrayLength 參數指定每個緩沖區中提供的元素數。 本質上,這與將迭代次數設置為 arrayLength 並執行語句相同。
有關更多詳細信息,請參閱 Oracle 文檔 - https://docs.oracle.com/cd/E24693_01/appdev.11203/e10764/performance.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.