0

このようなDB2ストアドプロシージャを作成しています

create or replace procedure test()
dynamic result sets 1
begin
     //declaration of variable goes here
     declare continue handler for sqlexception set errstate = sqlstate;
     savepoint save1 on rollback retain cursors;
     //some transaction
     if errstate <> '00000' then
        rollback to savepoint save1;
     end if
     //return errstate as result set
end@

それでも、何らかの理由で errstate が「00000」でない場合 (おそらくデッドロック)、取得した errstate は 3B001 であり、これは作成したセーブポイントが存在しないか無効であることを表します

自動コミットをオフにしようとしましたが、それでも機能しません。さらに、私の理解では、上記のクエリは単一のトランザクションとして扱われるため、必ずしも自動コミットをオフにするわけではありません

CentOS 6.5で実行されているDB2 ESE 10.5上

なにか提案を?

- - -ノート - - -

変更することで問題を解決できました

 rollback to savepoint save1 

ただに

rollback

これで問題は解決しますが、「ロールバックからセーブポイントへのセーブ1」を使用しただけで特定のセーブポイントへのロールバックを拒否した理由はわかりませんが、「ロールバック」だけを使用すると機能しますか? なぜこれが起こっているのか、誰かが私に説明するのを手伝ってもらえますか?

4

0 に答える 0