簡體   English   中英

使用Oracle OCCI回滾事務

[英]Rolling back transaction with Oracle OCCI

我的代碼類似於下面的簡單示例,它嘗試在發生錯誤時回滾數據庫寫入。 但是,一半的數據似乎留在數據庫中而不是被刪除/回滾。

statement->setAutoCommit(false);
statement->setMaxIterations(3);

int counter = 1;
try
{
    statement->setInt(1, 1);
    statement->addIteration();

    statement->setInt(1, 2);
    statement->addIteration();

    statement->setInt(1, 3);
    statement->executeUpdate();

    statement->setInt(1, 4);
    statement->addIteration();

    statement->setInt(1, 2); // ERROR HERE (Unique constraint)
    statement->addIteration();

    statement->setInt(1, 6);
    statement->executeUpdate();

    connection->commit();
}
catch (oracle::occi::SQLException ex)
{
    connection->rollback();
    connection->terminateStatement(statement);
    throw DatabaseException(ex.what());
}

如果我收到Oracle錯誤,那么我想回滾當前事務,以便寫入NO行。 然而,這似乎並沒有正常工作。

我有一個寫入失敗的一半,它沒有成功回滾行。 我最終將一半數據寫入數據庫。

我是否遺漏了setAutoCommit(false)connection->rollback()命令?

這可能是批處理錯誤處理的副作用,如果您希望在出錯時引發異常,則應嘗試調用setBatchErrorMode(false)。 否則,您還可以使用批處理錯誤模式並檢查收集的錯誤,並確定是否要提交或回滾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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