No.1ベストアンサー
- 回答日時:
実際のOracleとは、動きが違うので、カーソルとはこういうものだという概念だと思ってください。
データベースは、時と場合によって、テーブルからデータを持ってきてそのデータによって、処理を変えたくなる処理があります。
その場合、テーブルからとってきたデータを一時的に変数保存して、保存されたデータを調べて処理を行うという手順になります。
このときに、テーブルからとってくるデータが、1行複数列の場合、列の数だけ変数を作って、データを保存すればよいのですが、複数行のデータを取ってくる時、ほとんどの場合、何行とってくるのかはわかりません。また、その行数分だけ、繰り返しの作業が必要になることが多いはずです。
このような処理を行いたいときに、複数行のデータをいっぺんに保存し、繰り返しの処理を行いやすくした変数をカーソルといいます。そして、このカーソルを使った処理を「カーソル処理」と呼びます。
Oracleの場合、PL/SQLを使うとき、クライアントサイドで、ADO、DAO、RDO、oo4oなどを使う場合に、カーソルという概念が出てきます。
メリットとしては、上記のとおり、複数行に対して、複雑な条件による分岐処理を、1つのメソッド(PL/SQL文や、ストアドプロシージャなどのコール)で終わらせることができるため、ネットワークトラフィックを大幅に減らせる可能性があります。
デメリットは、カーソルを使うと、複数行に対する繰り返し処理になるので、条件が複雑でない場合や、多くの行を処理する場合はできるだけカーソルを使わずに、insert、update、delete文で処理するようにしないと処理時間が非常に長くなります。
ありがとうございました。
まだまだ完全に理解できるほど知識がないのが非常に悔しいのですが、
少しずつでも覚えていこうと頑張っています。
少しでもはやくmsystemさんみたいになれるように・・・
本当に有難うございました。
No.2
- 回答日時:
msystemさんがおっしゃっている通りです。
ですが、私も私なりになるべく噛み砕いて説明してみます。
SQLというのは、「こういう条件の結果がほしい」というような
指示の仕方をする言語(「非手続き型言語」)であるわけ
ですが、これで得た結果をJavaやCのように、「こういう手続きで
得られる結果がほしい」という指示の仕方をする言語(「手続き型
言語」)で処理したいような場合に、カーソルというのが、
必要になってきます。
SQLは、たとえば、誕生日が5月の会員の一覧が見たい、と
いうような場合に、そのデータをいっぺんに返すことができますが、
その会員それぞれの運勢を、Javaのプログラムで占って、その
結果をメールで配信したい、というような場合は、取得した結果を、
Javaのプログラムで処理できるような形にしなければなりません。
こういうときにカーソルを利用して、取得してきたデータを1つ1つ
順々に取り出せるようにして、Javaでつくった処理にかけられる
ようにするわけです。
ちなみに、Oracleの場合、必ずしもJavaやCの助けを借りなくても
大丈夫な場合があります。というのも、PL/SQLという、「手続き型
言語」が、あらかじめ用意されているからです。
PL/SQLは、SQLと手続き型の処理を、非常に簡単に融合させることが
できます。何かと便利なものです。
おいおい、PL/SQLにも眼を通すようにするとよいかもしれません。
Oracleは、いまやスタンダードなRDBMSなので、得た知識はきっと
役に立つだろうと思います。勉強、頑張ってください。
わざわざかみ砕いていただいて、わかりやすかったです。
現在(理解しているかどうかは別にして)SQLからPL/SQLの勉強に移りました。
壁にぶつかってばかりでなかなか前に進めない状況ですが、
頑張っていこうと思っています。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
ACCESSで一括処理する方法
-
クエリの実行時間の目安
-
ストアドプロシージャ_カーソル...
-
Accessで処理経過を表示したい...
-
SQL plus で改行
-
データ型でFloatとreal の計算...
-
カーソル宣言をIFで分けられま...
-
カーソルを使って、最終行レコ...
-
アナライズ
-
SQLについて WITH句とサブクエ...
-
(x 行処理されました)を表示さ...
-
NVLとDECODEのスピード差
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
for whichの使い方
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
SQLで列名を変数にできないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
カーソルを使って、最終行レコ...
-
処理件数を非表示にしたい
-
カーソル宣言をIFで分けられま...
-
データ型でFloatとreal の計算...
-
クエリの実行時間の目安
-
ストアドプロシージャ_カーソル...
-
ACCESSで一括処理する方法
-
NVLとDECODEのスピード差
-
Accessで処理経過を表示したい...
-
動的SQLの処理件数
-
SQL plus で改行
-
カーソルがコミットするとクロ...
-
300万件のデータの処理について
-
SELECT と INSERT の速度
-
RDBとVSAMの比較
-
カーソルオープンの処理について
-
(x 行処理されました)を表示さ...
-
SQL-LOADERの逆のもの
-
PL/SQL で continue ?
おすすめ情報