- ベストアンサー
カーソル処理って?
最近オラクルの勉強をはじめたのですが、 本当に初心者なので、何がなにやらさっぱりわからないことだらけです。 それでも、だいたいのものはネット検索や辞書で調べたりしてわかったのですが、 ”カーソル処理”で躓いてしまいました。 どういうもので、どんな働きをするものなのか、 どういうメリットをもっているのかなど教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際のOracleとは、動きが違うので、カーソルとはこういうものだという概念だと思ってください。 データベースは、時と場合によって、テーブルからデータを持ってきてそのデータによって、処理を変えたくなる処理があります。 その場合、テーブルからとってきたデータを一時的に変数保存して、保存されたデータを調べて処理を行うという手順になります。 このときに、テーブルからとってくるデータが、1行複数列の場合、列の数だけ変数を作って、データを保存すればよいのですが、複数行のデータを取ってくる時、ほとんどの場合、何行とってくるのかはわかりません。また、その行数分だけ、繰り返しの作業が必要になることが多いはずです。 このような処理を行いたいときに、複数行のデータをいっぺんに保存し、繰り返しの処理を行いやすくした変数をカーソルといいます。そして、このカーソルを使った処理を「カーソル処理」と呼びます。 Oracleの場合、PL/SQLを使うとき、クライアントサイドで、ADO、DAO、RDO、oo4oなどを使う場合に、カーソルという概念が出てきます。 メリットとしては、上記のとおり、複数行に対して、複雑な条件による分岐処理を、1つのメソッド(PL/SQL文や、ストアドプロシージャなどのコール)で終わらせることができるため、ネットワークトラフィックを大幅に減らせる可能性があります。 デメリットは、カーソルを使うと、複数行に対する繰り返し処理になるので、条件が複雑でない場合や、多くの行を処理する場合はできるだけカーソルを使わずに、insert、update、delete文で処理するようにしないと処理時間が非常に長くなります。
その他の回答 (1)
- misoka
- ベストアンサー率35% (56/160)
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の勉強に移りました。 壁にぶつかってばかりでなかなか前に進めない状況ですが、 頑張っていこうと思っています。 有難うございました。
お礼
ありがとうございました。 まだまだ完全に理解できるほど知識がないのが非常に悔しいのですが、 少しずつでも覚えていこうと頑張っています。 少しでもはやくmsystemさんみたいになれるように・・・ 本当に有難うございました。