ざっくりとした質問で申し訳ないのですが、D

Writer: admin Type: 観葉植物 Date: 2019-03-06 00:00
ざっくりとした質問で申し訳ないのですが、DBの処理をカーソルで行うと重いからおススメしない意見を聞いたことがありますが、その理由がわかりません。どなたか教えていただけますでしょうか。共感した0###カーソルを使う場合はカーソルを使わないと出来ない場合ですので、お勧めしない理由は有りませんが、使う必要の有る場合は殆ど有りません、必要な場合は1件前の行の処理結果で次の行に処理が異なる場合のみです、今まで使った場面は生産管理システムの在庫引き当てのみでした、同じ品目で納期の早い前の行で在庫が無くなった時点で、次の行から在庫引き当てをしないようにする為です。ナイス0
###1人だけ変な奴がいましたが、多くの方は親切な回答をしていただき、ありがとうございました!###わたし茂子ちゃんと旦那さんには本当に不思議でした?ナイス0
###RDBで「カーソル」と言った場合はORACLEのPL/SQLのようなストアドプロシージャの場合、COBOLやJavaなどでの「埋め込みSQL」の場合、JDBCのResultsetなどを介した処理を指す場合などがあると思います。参照系のSELECT処理ではなく更新、削除を伴う場合、発行されるSQLは対象となる行単位です。複数のテーブルについて一方のテーブルの値を使い他方を更新、削除する場合と比べるとRDBMSとの通信が大量になります。参照系の処理でもCOBOLのプログラムなどで一般的な一方を1行読んでそのレコード内の項目をキーに持つテーブルを読みにいく形式を取る場合もSQLが大量に発行されます。RDB自体カーソルのような行指向のアプローチは苦手ですのでできるだけ一つまたは複数のテーブル単位の処理を行うのが基本です。仕様としてそうするのが難しい場合があることも事実ですが。ナイス0
###カーソルで何か処理をするということは、一行一行処理を行い、それを必要行数分処理をすることです。仮に1000行に処理をすれば、処理は1000回行うことになります。もしそれが、カーソルでなく、SQL文で処理ができるのであれば、処理回数は、発行したSQL文の数だけです。おそらく1000文ものSQLにはならないでしょう。そうすると、処理回数だけで見ても、カーソルよりSQL文の方が軽いことになりますナイス0

 

TAG