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 リモート デスクトップ ライセンス サーバーがライセンスを提供できず、リモート セッションが切断される

推薦する

MySQLユーザー削除バグを解決する

著者が MySQL を使用してユーザーを追加していたところ、ユーザー名が間違って記述されていることに...

CSSレコードテキストアイコン配置のいくつかのソリューション

開発中に画像とテキストが 1 行に表示されることはよくあります。2 つのインライン要素を揃えるのは通...

js で下線とキャメルケースの変換を実装する (複数の方法)

目次適用シナリオ:方法 1: 正規表現 (推奨)方法2: 配列のreduceメソッドを使用する方法3...

CocosCreatorで複数のタイマーを使用する方法の詳細な説明

1.タイムアウトを設定する3 秒後に abc を印刷します。一度だけ実行します。 setTimeou...

MySQL ビッグデータ クエリ最適化エクスペリエンスの共有 (推奨)

本格的な MySQL 最適化! MySQL のデータ量が少ない場合は最適化は不要です。データ量が多い...

CSS で実現される HTML 背景色のグラデーション

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

Dockerコンテナは定期的にデータベースをバックアップし、指定されたメールボックスに送信します(設計アイデア)

目次1. 背景: 2. デザインのアイデア: 3. 起動スクリプトを書く4. イメージを構築する5....

MySQL DML言語操作例

追加説明、外部キー: 外部キーを使用しないでください。すべての外部キーの概念はアプリケーション層で解...

ドメイン名を nginx サービスにバインドする方法

nginx.conf で複数のサーバーを設定します。 http リクエストを処理する際、nginx ...

Vue ショッピングカートのケーススタディ

目次1. ショッピングカートの例2. コードの実装3. まとめ1. ショッピングカートの例一連の学習...

Linux nslookup コマンドの使用方法の詳細な説明

[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...

ベースタグとは何ですか? また、それは何をするのですか?

<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトの...

IDEA2021 tomcat10 サーブレットの新しいバージョンの落とし穴

私が学習していたときに使用していたバージョンは比較的新しいものであり、インターネット上のチュートリア...

HTML ボディタグと HTML でよく使われる制御タグの詳細な説明

1. <body> タグ: Web ページの本体をマークするために使用されます。body...

MySQL 変数宣言とストアド プロシージャの分析

変数の宣言グローバル変数の設定@a='新しい変数' を設定します。関数やストアドプロ...