• ベストアンサー

PL/SQL temporary tableってもてるの??

1.procedureが呼ばれて、複数のtableがupdateされます 2.条件判定によってrollbackされる ここで、1で複数tableに書き込まれたものが戻ってしまう。 1つだけrollbackしたくないtableがあるので、rollback前の対象レコードを保持しておいて、rollback後、保持しておいた値で再度updateして欲しいという依頼なのです。 rollback前の対象レコード(複数存在します)をワークエリアに保持しておいて、rollback後、その値をとってupdateすればいいのでは? と考えたのですが。 temporary tableに持てるのかなぁ?と。 PLは初体験なので、書き方もよくわからりません。どなたかご教授願えませんか?また、なにか他にいい方法がありましたらアドバイスください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jmh
  • ベストアンサー率23% (71/304)
回答No.2

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

その他の回答 (1)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

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

satosai
質問者

補足

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

関連するQ&A