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