簡體   English   中英

使用 OCCI C++ 批量寫入 Oracle 數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM