• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Pro*Cでのfor update)

Pro*Cでのfor updateとは?

このQ&Aのポイント
  • Pro*CのSQL文中にあるselect ・・・for update (イ)とは、SQL文を実行した後に該当のデータをロックすることを意味します。
  • Pro*Cでのfor updateを使用した場合、プログラムを抜ける際にcommitやrollbackを行わなくても動作します。
  • Pro*Cのオススメな本については、まだ特定の本を見つけていませんが、オンラインリソースや他の開発者のソースコードを参考にすることができます。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Oracleは使ったことがありませんが、 通常データベースは、 更新処理の途中で何かに失敗した時 例えば Aと言う処理をした Bと言う処理をした Cと言う処理で正しく処理できなかった とかいう時、 処理としては、A、B、C一連の処理が正しく行われた時がデータベースとして整合が取れている状態で CだけがウマくいかなかったからCだけ止めるということができないような処理があります。 こう言う時には、AやBの処理もなかったことにするということをします。 これが、ロールバックです。 ロールバックと言っても、いつの時点まで戻せばいいかわからないので、通常、前にコミットされた状態まで戻します。(プログラムを開始してから一度もコミットされていなければプログラム開始時まで戻すわけです) プログラムが正常に終了した場合は、プログラムによって自動的にコミットされると思われますが、 通常1つの(単位の)処理が終われば、コミットします。そうすることで、次に何か失敗した時にそこまで戻ることができるからです。 もし、あらゆる更新をやって、最後までコミットしないなら、なんらかの原因でロールバックが起こった時最初まで戻ってしまいます。 そうすると、その間正常に終了していた処理までもムダになってしまいます。 また、そのように、データベースがロールバックできる状況にあるということは、他のプログラムから更新されないようロックされているということでもあります。そのため、1つの単位となる処理が終われば通常コミットを行います。 私は、オラクルを使ったことはないので、本についてはわかりません。

sawasuke
質問者

お礼

丁寧な回答をありがとうございます。 結局、コミット、ロールバックを 今回修正したプログラムでは記述しないことになりました。 今日テストしましたが、やっぱり問題ないみたいです。 ありがとうございましたーーー。

関連するQ&A