• ベストアンサー

カーソルでのデータ取得

いつもお世話になっております。 カーソルをオープンしたあとに(閉じる前に)、 カーソルのデータ取得元テーブルのデータが変化しても問題ありませんよね? ロジック的には。。。 OPEN カーソル カーソルデータ取得元テーブルのトランケート カーソルデータを1件ずつ編集し、データ取得元テーブルにINSERT CLOSE カーソル って感じなんですが。 キー重複などの関係で、一度テーブルを初期化した後に、もともとそのテーブルから取得したデータを編集し、INSERTしたいんです。 カーソルはOPENした時点の値を持ち続けるんですよね? 質問がわかりにくくてすみません

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

  • ベストアンサー
回答No.2

>カーソルはOPENした時点の値を持ち続けるんですよね? コミット/ロールバックまでのトランザクションの間、持ち続けるという理解で 間違いはありませんが・・・ トランザクション中で行える操作が限られます。 DDL関係の操作はトランザクション中に投げると、トランザクションが強制的に コミットされるか、DDL関係の操作が弾かれます。 >キー重複などの関係で、一度テーブルを初期化した後に、 データの洗い替えのような処理では、処理手順の問題で、そのような問題が 起こる可能性もありますが、初期化等の手順を踏まなくても、処理の対象や 処理する順番をよく考えることで、キー重複は抑制できるはずです。 また、それが更新量を最低限に抑えることにもつながるはずです。 (処理順の整理が難しいとは思いますが・・) どうしても、初期化の手順が必要であるなら・・ 一時保存用のテーブルを用意した上で、それを経由して初期化&再登録の考え方を 取る方が危険が少ないと思いますよ。(特にデータ量が多い場合は・・)

その他の回答 (1)

回答No.1

 トランザクション、読み取り一貫性、を少し参照された方が良いと思います。  暗黙のトランザクション制御により‘はい’です。

関連するQ&A