トランザクションの実行中に何かが発生した場合に、セーブポイントを使用して復元したいと考えています。
私が実行しているステートメントは次のとおりです。
const char *sqlSetSavePoint = @"savepoint updateSavepoint";
const char *sqlRollback = @"Rollback transaction to savepoint updateSavepoint";
これらのステートメントを実際に実行する多くのコードを明らかに省略しましたが、他のステートメントに対して同じメソッドを実行していて、それらが正常に機能しているため、問題はないと確信しています。挿入トランザクション (最大 20 万行の挿入) を実行する前にセーブポイントを設定しています。その後、何かが例外またはエラーをスローした場合は、ロールバックを試みます。
私の質問は; これらのロールバックステートメントは正しいですか(そして、私は何か間違ったことをしています)、またはiOSのsqlite3でセーブポイントを使用する他の方法はありますか?
編集: 明確にするために、いくつかのトランザクションを実行する前にセーブポイントを設定しようとしています。それらのいずれか、またはサーバーからのデータフェッチが失敗した場合は、セーブポイントに完全にロールバックします。それは単にこのようなものです:
"savepoint updateSavepoint"
->FetchDatafromServer()
-> "Begin exclusive transaction"
//sqlite3_bind functions
-> "Commit transaction"
->FetchDatafromServer()
-> "Begin exclusive transaction"
//sqlite3_bind functions
-> "Commit transaction"
->FetchDatafromServer()
-> "Begin exclusive transaction"
//sqlite3_bind functions
-> "Commit transaction"
->FetchDatafromServer()
-> "Begin exclusive transaction"
!!Failure!!
"Rollback transaction to savepoint updateSavepoint"