0

ストアド プロシージャに次の構造があります。

loop
try
  update some record to state "1"
  make some process
  update that record to state "2"
  commit 
exception
  update that record to state "3" //error !
end
end loop

このループの実行中に、セッションの強制終了やクライアントの切断などのエラーが発生したとします。このエラーを脅かすにはどうすればよいですか? try..例外が機能していません。レコードの状態フィールドに「3」を書き込む必要があります。

4

1 に答える 1

1

次のことを考慮することができます。

loop
try
  update some record to state "3"
  commit
  update some record to state "1"
  make some process
  update that record to state "2"
  commit 
end
end loop

したがって、ステータスを「3」に設定してコミットすることから始めます。次に、実際の処理を開始します。プロセスが終了する前にセッションが強制終了された場合、最初のコミット以降の変更がロールバックされるため、ステータスは「3」にロールバックされます。処理が正常に終了すると、変更がコミットされ、ステータスが「2」に設定されます。

ステータスを「1」に設定する理由がよくわかりません。トランザクションのコミット前に常に「2」で上書きされるため、トランザクションの外では表示されません。

于 2013-05-10T22:44:47.107 に答える