• ベストアンサー

カーソル処理って?

最近オラクルの勉強をはじめたのですが、 本当に初心者なので、何がなにやらさっぱりわからないことだらけです。 それでも、だいたいのものはネット検索や辞書で調べたりしてわかったのですが、 ”カーソル処理”で躓いてしまいました。 どういうもので、どんな働きをするものなのか、 どういうメリットをもっているのかなど教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

実際のOracleとは、動きが違うので、カーソルとはこういうものだという概念だと思ってください。 データベースは、時と場合によって、テーブルからデータを持ってきてそのデータによって、処理を変えたくなる処理があります。 その場合、テーブルからとってきたデータを一時的に変数保存して、保存されたデータを調べて処理を行うという手順になります。 このときに、テーブルからとってくるデータが、1行複数列の場合、列の数だけ変数を作って、データを保存すればよいのですが、複数行のデータを取ってくる時、ほとんどの場合、何行とってくるのかはわかりません。また、その行数分だけ、繰り返しの作業が必要になることが多いはずです。 このような処理を行いたいときに、複数行のデータをいっぺんに保存し、繰り返しの処理を行いやすくした変数をカーソルといいます。そして、このカーソルを使った処理を「カーソル処理」と呼びます。 Oracleの場合、PL/SQLを使うとき、クライアントサイドで、ADO、DAO、RDO、oo4oなどを使う場合に、カーソルという概念が出てきます。 メリットとしては、上記のとおり、複数行に対して、複雑な条件による分岐処理を、1つのメソッド(PL/SQL文や、ストアドプロシージャなどのコール)で終わらせることができるため、ネットワークトラフィックを大幅に減らせる可能性があります。 デメリットは、カーソルを使うと、複数行に対する繰り返し処理になるので、条件が複雑でない場合や、多くの行を処理する場合はできるだけカーソルを使わずに、insert、update、delete文で処理するようにしないと処理時間が非常に長くなります。

mimoza22
質問者

お礼

ありがとうございました。 まだまだ完全に理解できるほど知識がないのが非常に悔しいのですが、 少しずつでも覚えていこうと頑張っています。 少しでもはやくmsystemさんみたいになれるように・・・ 本当に有難うございました。

その他の回答 (1)

  • misoka
  • ベストアンサー率35% (56/160)
回答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なので、得た知識はきっと 役に立つだろうと思います。勉強、頑張ってください。

mimoza22
質問者

お礼

わざわざかみ砕いていただいて、わかりやすかったです。 現在(理解しているかどうかは別にして)SQLからPL/SQLの勉強に移りました。 壁にぶつかってばかりでなかなか前に進めない状況ですが、 頑張っていこうと思っています。 有難うございました。

関連するQ&A

  • カーソル0件の時にエラーを発生させる

    以下の処理をしようと考えています。 Aテーブルをカーソルで検索     →0件だった場合にはエラー ・・・ (1)     →データが入っていた場合には処理     →カーソルのデータがなくなったら処理を正常終了 カーソルに入っているデータが0件だった場合、Oracle上ではエラーとはみなされず、処理が正常終了してしまいます。 カーソルデータが0件だった場合にエラーを発生させるにはどのようにコーディングすればよいですか?

  • パソコンの処理中カーソルについて

    Corel Digital Studio を立ち上げて作業をしたり DVD-Rなどを入れて見た後に 脈を打つみたいに出たり消えたりしながら 処理中のグルグルするのがカーソルの横に出るようになってしまいました。 これを書いている今もなってます…。 特に動作が遅くなったりすることはありませんが、 気になって鬱陶しいです。 再起動してから同じように作業をすると戻ってしまいます。 対処法を教えてください。 パソコン初心者ですので、簡単な表現でお願いします。

  • カーソルエラー

    カーソルエラーについて質問です。 phpからpearを使ってoracleへ接続しています。 バッチ処理で大量にSQL文(SELECT,INSERT,UPDATE)を発行したいのですが、カーソルエラーになってしまいます。 途中の処理でエラーになった場合はロールバックしたい為最後までコミットできません。また、なるべく少ないSQL発行で済むようにプログラムを組み替え済みです。 で、少々手詰まりといった状況なのですが、コミットする以外でカーソルエラーを回避する方法はあるでしょうか? DB設計から見直さないとだめですかね…。

    • 締切済み
    • PHP
  • MySQLではカーソルを使うことができない?

    MySQLでデータベースの勉強をしています。 先頭からレコードを1件ずつシーケンシャル処理を行う時、カーソル定義をすればFETCHが使えそうです。 でもMySQLにはカーソルがないようです(SQLポケットリファレンス 技術評論社 平成17年版) ではどのような方法があるのでしょうか。 或いは最新版のMySQLではカーソル変数定義できますか?

  • エラー処理がテーマの本を探しています。

    最近.netを勉強し始めた者です。 エラー処理について詳しく勉強したく、良書を探しております。 とある本の検索サイトで検索してみたのですが、エラー処理がテーマの本はなぜかVB6のものばかりでした。 (内容の1セクションとして、エラー処理が載っているものはたくさん見つかったのですが…。) 文法的なエラー(例外)処理の説明ではなく、設計的な意味合いでの解説本で、お勧めのものがございましたら、お教えください。 よろしくお願い致します。

  • Windows10で、カーソルが消えるので...

    Windows10で、コマンドラインを使っているとカーソルが消えることがあります。 ネット検索すると、 一度powershellしてexitして戻ってくればカーソルが復活する 的な情報発見 実際にやってみるとその通りでした。 しかし、powershellが起動するまでが遅いし、更にそれを待ってからexitと打たなければなりません。 これ、時間が掛かるのはしょーがないとして、せめて待つのを何とかしようと C:>powershell -command "exit" としたのですが、戻ってくるんだけど、その時にカーソルが消えたままなんです。 他に方法はないんすかね

  • カーソル右クリックで、読みかな・辞書は出ませんか?

    カーソル右クリックで読めない漢字や簡単な意味を調べる機能。 カーソル右クリックで「Bingで翻訳」とかはあります。あとは「googleで検索」があります。 簡単に(よみ・辞書)みたいのがでる機能はないでしょうか。 Windows7です。 *動画UPします。音は無視してください。

  • カーソルの位置がおかしい

    ツールバーの中にあるグーグル検索で漢字変換のとき変換候補だしてTABキーで一覧表示しようとすると左上の青いとろにカーソルが飛んでしまいます初心者ですよろしくおねがいしますXPです

  • ボタンにカーソルを当てるとボタンが動く

    こんにちわ。 ボタンにカーソルを当てるとボタンが動くように設定したいのですが、どのようにやるのかわからなくて、困ってしまいました。 ネットなどでも検索したのですが、これだという答えがなかったので、もしお分かりの方がいらっしゃったら、お手数ですが、よろしくお願いします。

  • カーソルをあてるだけで横にでる画面を消したいです

    いつもお世話になっています。 パソコン超初心者のため上手に説明ができないんですがgoogleで検索結果がでて、その項目の横にある⇒のようなボタンにカーソルをあてるとこれから開くであろう画面がでてきます。 これをできたら消したいのですが、こちらに質問する前に自分で調べようとしましたが検索の仕方が悪いためかうまくヒットしません。 または元々がこうなのでしょうか? よろしくお願いします。