dポイントプレゼントキャンペーン実施中!

1.procedureが呼ばれて、複数のtableがupdateされます

2.条件判定によってrollbackされる

ここで、1で複数tableに書き込まれたものが戻ってしまう。 1つだけrollbackしたくないtableがあるので、rollback前の対象レコードを保持しておいて、rollback後、保持しておいた値で再度updateして欲しいという依頼なのです。

rollback前の対象レコード(複数存在します)をワークエリアに保持しておいて、rollback後、その値をとってupdateすればいいのでは? と考えたのですが。
temporary tableに持てるのかなぁ?と。

PLは初体験なので、書き方もよくわからりません。どなたかご教授願えませんか?また、なにか他にいい方法がありましたらアドバイスください。よろしくお願いします。

A 回答 (2件)

delete t where … returning … bulk collect into … で削除しながら回収して、rollback の後 insert するとイイんじゃないかしら。

    • good
    • 0

こんにちわ


> 1つだけrollbackしたくないtableがあるので、・・・
rollback したくないテーブルに対する更新部分を自律型トランザクション
としてStored Procedure にして下さい。
自律型トランザクションの中でCommit すれば、後は呼出元が
Rollback されてもデータは確定されます。
詳細については、マニュアルで確認して下さい。

この回答への補足

アドバイスありがとうございます。複数のtableを更新しているprocedureは別チームが管理しているため、そちらのprocedureには手出しができないのです。いろいろ深い事情があるらしく・・・。

補足日時:2006/04/08 17:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!