サードパーティのAPIとしてOracleデータベースに格納されているプロシージャはほとんどありません。これらのapi-callを1つのトランザクションでチェーンしたいと考えています。それはできますか? 私はthat answerから理解していますが、セーブポイントを使用できます。しかし、これらのAPIがすでにコミットステートメントを持っていれば動作しますか? Oracleはネストされたコミットをロールバックしますか?Oracleのトランザクション
また、Oracleはセーブポイントと同時実行性をどのように使いますか? I.図がある場合
connection#1 (my api call) connection#2 (3rd party api call)
savepoint sp1;
savepoint sp2;
update t1 where id=1 set val=1; update t1 where id=2 set val=2;
commit; --done
call bad_stored_proc();
rollback to sp1;
ここではどうなりますか?ロールバックは行(id = 1、val = 1)、または両方の行にのみ影響しますか?
すでにコミットされているものはロールバックできません。だから、このような状況では、一連の呼び出しが重要で、正確に何をロールバックしたいのですか。明らかに、ベンダーSPのコミットされた作業をロールバックすることはできません。したがって、自分のコードに集中する必要があります。あなたのコードはベンダのSp実行結果に依存しますか?それは呼び出しのシーケンスで行く場所。それはベンダーのSPへの呼び出しの最初か最後か途中かになりますか?あなたがベンダーのSPを呼び出すことを避けるか、ロールバックするときに避けられないことがある(非常に注意する必要があります、それらのSPが何をするかによって異なります)。 –
(ベンダーのSP)がコミットすると、「バグ」となる可能性があります。そうしなければならない場合、ベンダーは非常に慎重に処理する必要があります。 –