

オラクルのDBで環境はUNIX(IBMのマシン)です。
DBについて詳しくありませんが、以下のようなことを行いたいと考えています。
1.あるDB(DB-A)のレコードを特定のキーの昇順に全レコード読み込む。(特定のキーは、例えば商品コードなど)
2.1レコードを読み込む毎に、他のDB(DB-B)を読み込んだレコードを元に、更新したい。
その際、1レコードを読み込む都度、
2-1.トランザクションの開始
2-2.DB-Bの更新
2-3.コミット又はロールバック
のようにしたい。
上記のことを考えて以下のような作りにしました。
1.カーソルのオープン
2.以下のループを作成
2-1.DB-Aから1レコードのフェッチ
2-2.トランザクションの開始
2-3.DB-Bの更新
2-4.コミット(ロールバック)
しかしながら、コミット(又はロールバック)を行うことにより、カーソルがクローズされてしまい、最初の位置にカーソルが戻ってしまいます。(私がコーディングして試験したわけではありません。このような報告をうけました)
それで、カーソルが戻らずに、全レコードを処理するようにしたいのですが、どのようにしたら良いのでしょうか。ご存じの方おりましたらアドバイスをお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは。
私が経験した中ではフェッチをするテーブルに対して[for update]している場合に途中でコミット処理を行うとカーソルが破壊される現象がありました。
ご質問の現象はDB-Aに対してupdateはしていないようなので原因は違うところにあるかも知れませんので、取り敢えず以下のチェックを行ってみて下さい。
1.コミット処理を全てのレコードが処理された後に行ってみる。
2.ループの中にカーソルのオープン処理が入っていないか確認。
3.SQLエラー時(Null Getも含み)にカーソルのオープンまで処理が戻らないか確認。
考えれるのはこれくらいですかね。
上記[1.]の処理で正常に動作するようであればそれで良いと思います。
但し、この場合にはロールバックセグメントにかなり余裕が必要(大きく定義する)になりますのでご注意ください。
余談ですが、1件毎にコミット処理を行うのは非常に効率がよくないと思います。
ではでは・・・
返事が送れて申し訳ありませんでした。結局本件は、「オラクルの仕様としてそのようなことはやってはいけないことになっている」という結論に至り、質問に書いたようなやり方を採用しないことで、決着がつきました。しかしながら、回答を拝見すると、「仕様としてできないことはなく、出来るはず」のように思われますので、自分で機会があれば、確認してみます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
データ型でFloatとreal の計算...
-
ストアドプロシージャ_カーソル...
-
NVLとDECODEのスピード差
-
テーブルの項目が異なるテーブ...
-
PL/SQL で continue ?
-
Outlook 送受信エラー
-
エクセルで最後の文字だけ置き...
-
for whichの使い方
-
差し込み後、元データを変更し...
-
MessageBoxで表示される文字列...
-
SQLで特定の項目の重複のみを排...
-
【Transact-sql】 execの結果を...
-
外部参照してるキーを主キーに...
-
ソフトバンクの無料着うたのお...
-
バッチでcsvファイルの指定のカ...
-
列のヘッダーを含めるのをデフ...
-
WordpressのContact form 7でzi...
-
エクセルに見えない文字(JISX0...
-
1日に1人がこなせるプログラム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
カーソル宣言をIFで分けられま...
-
データ型でFloatとreal の計算...
-
カーソルを使って、最終行レコ...
-
(x 行処理されました)を表示さ...
-
処理件数を非表示にしたい
-
SQL-LOADERの逆のもの
-
RDBとVSAMの比較
-
ストアドプロシージャ_カーソル...
-
Accessで処理経過を表示したい...
-
カーソルオープンの処理について
-
NVLとDECODEのスピード差
-
カーソルがコミットするとクロ...
-
SQL plus で改行
-
PL/SQL で continue ?
-
VBAで複数あるTEXTBOXをクリッ...
-
テーブルの項目が異なるテーブ...
-
クエリの実行時間の目安
-
わり算の結果が整数でも小数点...
-
SELECT と INSERT の速度
おすすめ情報