- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:カーソルがコミットするとクローズされてしまう。)
オラクルのDBでカーソルがコミットするとクローズされてしまう問題について
このQ&Aのポイント
- オラクルのDBで環境はUNIX(IBMのマシン)です。特定のキーの昇順に全レコードを読み込み、他のDBを更新する処理を行いたい。しかし、コミット(又はロールバック)を行うことにより、カーソルがクローズされ、最初の位置に戻ってしまう問題が発生している。
- 問題の解決策について、具体的なアドバイスを求めています。カーソルが戻らずに全レコードを処理する方法についてご存知の方がいらっしゃいましたら、教えていただきたいです。
- また、オラクルのDBについて詳しくないため、この問題を解決するために必要な知識や手順についても教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 私が経験した中ではフェッチをするテーブルに対して[for update]している場合に途中でコミット処理を行うとカーソルが破壊される現象がありました。 ご質問の現象はDB-Aに対してupdateはしていないようなので原因は違うところにあるかも知れませんので、取り敢えず以下のチェックを行ってみて下さい。 1.コミット処理を全てのレコードが処理された後に行ってみる。 2.ループの中にカーソルのオープン処理が入っていないか確認。 3.SQLエラー時(Null Getも含み)にカーソルのオープンまで処理が戻らないか確認。 考えれるのはこれくらいですかね。 上記[1.]の処理で正常に動作するようであればそれで良いと思います。 但し、この場合にはロールバックセグメントにかなり余裕が必要(大きく定義する)になりますのでご注意ください。 余談ですが、1件毎にコミット処理を行うのは非常に効率がよくないと思います。 ではでは・・・
お礼
返事が送れて申し訳ありませんでした。結局本件は、「オラクルの仕様としてそのようなことはやってはいけないことになっている」という結論に至り、質問に書いたようなやり方を採用しないことで、決着がつきました。しかしながら、回答を拝見すると、「仕様としてできないことはなく、出来るはず」のように思われますので、自分で機会があれば、確認してみます。ありがとうございました。