あなたのアプリケーションでは、コミットまたはロールバックする前にトランザクションを開いたままにしておく「長い時間」はどれくらいですか? 分?秒?時間?
そしてどのデータベースで?
私はおそらくこれで炎上するでしょうが、カーソルの使用はパフォーマンスに深刻な影響を与えるため、避けるべきです。使用する必要がある場合は、カーソルによってブロックされているリソースをできるだけ早く解放するために、可能な限り最小限の時間だけ開いたままにする必要があります。
トランザクション: 分。
カーソル: 最大 0 秒、カーソルを使用すると発射されます。
SQL Server を実行する必要がある高可用性 Web 環境にいることを考えると、これはばかげたことではありません。また、ストアド プロシージャを正確にバージョン管理して維持することができないため、ストアド プロシージャも許可していません。オラクルを使用していた場合は、おそらく。
一般的に、私は他の答えに同意します。可能な場合はカーソルを避け(ほとんどの場合)、できるだけ早くカーソルを閉じます。
ただし、それはすべて、作業している環境によって異なります。
@ lomaxx、@ ChanChan:私の知る限り、カーソルはSQL ServerとSybase(T-SQLバリアント)でのみ問題になります。選択したデータベースがOracleの場合、カーソルは友だちです。カーソルを使用することで実際にパフォーマンスが向上するケースをいくつか見てきました。カーソルは非常に便利なメカニズムであり、「カーソルを使用すると起動する」などと言うのは少しばかげています。
そうは言っても、必要な絶対最小値の間だけカーソルを開いたままにしておきたいだけです。最大時間を指定することは、問題のドメインを理解していなければ、恣意的で無意味です。
@ninesided:パフォーマンスの問題はさておき、それは仕事に適したツールを使用することでもあります。カーソルをクエリからコードに移動するという選択を考えると、100回のうち99回は、そのループロジックをある種のマネージコードに入れる方がよいと思います。そうすることで、デバッガーの使用、コンパイル時のエラーチェック、safteyの入力などの利点を得ることができます。
質問に対する私の答えは同じです。カーソルを使用している場合は、できるだけ早く閉じてください。オラクルでは、明示的なカーソルも使用しようとしています。