MySQL カーソルの原理と使用例の分析

MySQL カーソルの原理と使用例の分析

この記事では、例を使用して MySQL カーソルの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • カーソルとは何か
  • カーソルの作成
  • カーソルの使用

リリース日: 2018-04-18


カーソルとは何か:

  • 以前に mysql 関数を見たことがあれば、複数行の結果を返すステートメントは使用できないことがわかります。しかし、実際に使用したい場合は、カーソルを使用する必要があります。カーソルを使用すると、結果を選択できます (単一の結果を返すことができるようになります)。
  • さらに、カーソルを使用すると、取得した行内で 1 行以上進んだり戻ったりする結果を簡単に取得できます。
  • カーソルは、返された結果の複数行を反復処理できます。

補充:

  • MySQL では、カーソルはストアド プロシージャと関数にのみ適用されます。


カーソルを作成します。

  • 文法:
    • 1. カーソルを定義します。declare cursor name cursor for select statement;
    • 2. カーソルを開きます: open cursor name;
    • 結果を取得: カーソル名を変数名 [, 変数名] に取得します。
    • カーソルを閉じる: カーソル名を閉じる;
      プロシージャ p1() を作成する
      始める
        id int を宣言します。
        名前を宣言するvarchar(15);
        --カーソルを宣言する。declare mc cursor for select * from class;
        -- カーソルを開きます open mc;
        -- 結果を取得するには、fetch mc into id,name;
        -- 結果を表示するには、select id,name; を実行します。
        -- カーソルを閉じる close mc;
        
      終わり;
      プロシージャ p2() を作成する
      始める
        id int を宣言します。
        名前を宣言するvarchar(15);
        --カーソルを宣言する。declare mc cursor for select * from class;
        -- カーソルを開きます open mc;
        -- 結果ループを取得 -- ループしてテーブルの内容を class2 に転送します fetch mc into id,name;
        -- 結果を表示するには、 insert into class2 values(id,name); を実行します。
        -- カーソル終了ループを閉じます。
        クローズ mc;
        
      終わり;


カーソルの使用:

  • カーソルがフェッチするたびに、結果の行が取得されます。変数を使用して、フェッチされた各列の値を取得できます。
    プロシージャ p2() を作成する
    始める
      id int を宣言します。
      名前を宣言するvarchar(15);
      --カーソルを宣言する。declare mc cursor for select * from class;
      -- カーソルを開きます open mc;
      -- 結果ループを取得 -- ループしてテーブルの内容を class2 に転送します fetch mc into id,name;
      -- 結果を表示するには、 insert into class2 values(id,name); を実行します。
      -- カーソル終了ループを閉じます。
      クローズ mc;
      
    終わり;

上記のコードにはエラーがありますimageループを続けると、必ずテーブルの終わりに到達します。終わりに到達すると、フェッチを続行できません。一般的に言えば、エラーを回避する必要があります。終わりに到達する前に、mysql定義の

プロシージャ p3() を作成する
始める
  id int を宣言します。
  名前を宣言するvarchar(15);
  フラグ int のデフォルトを 0 として宣言します。
  --カーソルを宣言する。declare mc cursor for select * from class;
  見つからない場合の継続ハンドラを宣言し、フラグを 1 に設定します。
  -- カーソルを開きます open mc;
  -- 結果を取得する l2:loop 
  
  mc を id、name に取得します。
  フラグが1の場合 -- フェッチに失敗した場合、ハンドラは続行されます
    l2を残す;
  終了の場合;
  -- 結果を表示するには、 insert into class2 values(id,name); を実行します。
  -- カーソル終了ループを閉じます。
  クローズ mc;
  
終わり;

p3() を呼び出します。-- エラーなし select * from class2;

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL カーソルの定義と使用法
  • カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る
  • MySQLでカーソルを宣言する方法
  • MySQLカーソルの使い方と機能の詳細な説明
  • Pythonで徹底的にわかるMySQLデータベース操作(カーソル解説)
  • MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明
  • MySQL カーソルの概念と使用法の詳細な説明
  • MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明
  • Mysql ストアド プロシージャでカーソルを使用する例
  • カーソルを使用したMySQLストアドプロシージャネストループのサンプルコード
  • MySQL ストアド プロシージャでカーソル ループを終了して継続する例
  • MySQL カーソル関数と使用法

<<:  JavaScript オブジェクト (詳細)

>>:  Windows Server 2012 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

推薦する

Vue プロジェクトで mock を使用する方法をご存知ですか?

目次最初のステップ: 2 番目のステップは、request.js で関連する構成を行うことです。re...

MySQL 5.7.18 でパスワードを変更する方法

MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...

webpackコード断片化の実装

目次背景コモンズチャンクプラグイン分割チャンク構成リソースを非同期に読み込む要約する背景高性能なアプ...

Linuxで相対パスを表現する方法

たとえば、現在のパスが /var/log で、/usr ディレクトリに移動する場合は、次のコマンドを...

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...

モバイル Web WAP には Bootstrap と jQuery Mobile のどちらを使用すべきか

問題を解決するBootstrap は、次の問題を解決する CSS フレームワークです。デバイス間での...

HTML ユーザー登録ページ設定ソースコード

上記の Web ページをデザインします。 <!DOCTYPE html> <htm...

XHTML: フレーム構造タグ

フレーム構造タグ <frameset></frameset>フレームを使用す...

虫眼鏡効果を実現するJavaScript

この記事では、虫眼鏡効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。...

CSS リセットスタイルリセットの実装例

はじめに: すべてのブラウザには、「ユーザー エージェント スタイル シート」と呼ばれる、すべてのペ...

ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

テキストカルーセルは私たちの日常生活で非常に一般的です。スーパーマーケットや実店舗の入り口には、テキ...

Vueシャトルボックスは上下の動きを実現します

この記事の例では、vueシャトルボックスを上下に動かすための具体的なコードを参考までに共有しています...

解決策 - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 権限が不十分です

1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...

Linux コマンドラインからファイルを削除する実用的な方法

rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...