カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る

カーソル ループを使用して、MySQL ストアド プロシージャで一時テーブルを読み取る

カーソル

カーソルは、結果セット内のデータを表示または処理するために使用される方法です。カーソルを使用すると、結果セット内のデータを一度に 1 行以上前方または後方に移動する機能が提供されます。

カーソルの使い方

カーソルを定義します。テーブルに対してカーソル名 CURSOR を宣言します。(テーブルは選択の結果セットにすることもできます)
オープンカーソル: オープンカーソル名;
結果セットからデータを変数に取得します: カーソル名を field1、field2 に取得します。
ステートメントの実行: データを処理する必要があるステートメントを実行します。カーソルを閉じる: カーソル名を閉じます。

始める
  #カスタム変数を宣言するdeclare c_stgId int;
  c_stgName varchar(50) を宣言します。
  #カーソル終了変数を宣言します。declare done INT DEFAULT 0;

  #カーソル cr と、カーソルが結果セットを読み取った後の最終処理メソッドを宣言します。declare cr cursor for select Name,StgId from StgSummary limit 3;
  見つからない場合の継続ハンドラを宣言し、done = 1 を設定します。

  # カーソルを開く open cr;

  # ループ readLoop: LOOP
    # カーソル内の値を取得し、変数に割り当てます fetch cr into c_stgName,c_stgId;
    # カーソルが下端に到達したかどうかを判定します。到達した場合はカーソルを終了します。# この判定に注意してください IF done = 1 THEN
      readLoop を終了します。 
    終了の場合; 
    
      c_stgName、c_stgIdを選択します。
    
  ループ終了 readLoop;
  -- カーソルを閉じます close cr;
終わり

変数宣言ステートメントに関する注意:

  • Declare文は通常、ローカル変数、カーソル、条件、またはハンドラを宣言するために使用されます。
  • Declare ステートメントは BEGIN...END ステートメント内でのみ使用でき、最初の行に表示する必要があります。
  • 宣言の順序も必要です。通常は、最初にローカル変数を宣言し、次にカーソル、最後に条件とハンドラーを宣言します。

カスタム変数の命名に関する注意:

カスタム変数の名前は、カーソル結果セット フィールドの名前と同じにしないでください。同じ場合、変数へのカーソルの割り当ては無効になります。

一時テーブル

一時テーブルは現在の接続でのみ表示されます。接続が閉じられると、MySQL は自動的にテーブルを削除し、すべてのスペースを解放します。したがって、異なる接続で同じ名前の一時テーブルを作成し、この接続に属する一時テーブルに対して操作を実行することができます。
通常の作成ステートメントとの違いは、TEMPORARYキーワードの使用です。

一時テーブルStgSummary(を作成します
 名前 VARCHAR(50) NOT NULL,
 StgId INT NOT NULL デフォルト 0
);

一時テーブルの使用に関する制限

  1. 同じクエリ ステートメントでは、一時テーブルを検索できるのは 1 回だけです。また、ストアド プロシージャ内で一時テーブルを複数回クエリすることはできません。ただし、1 つのクエリで異なる一時テーブルを使用できます。
  2. RENAME を使用して一時テーブルの名前を変更することはできませんが、代わりに ALTER TABLE を使用できます。
テーブル orig_name を変更して、新しい名前に変更します。
  • 一時テーブルは使用後に削除する必要がある
一時テーブルが存在する場合は削除します (StgTempTable)。

カーソル ループを使用してストアド プロシージャ内の一時テーブル データを読み取る

始める
## 一時テーブルを作成する CREATE TEMPORARY TABLE if not exists StgSummary(
 名前 VARCHAR(50) NOT NULL,
 StgId INT NOT NULL デフォルト 0
);
テーブル StgSummary を切り捨てます。

## 一時テーブルデータを追加する INSERT INTO StgSummary(Name,StgId)
「一時データ」を選択、1

始める

#カスタム変数は c_stgId int を宣言します。
c_stgName varchar(50) を宣言します。
完了を宣言 INT DEFAULT 0;

select Name,StgId from StgSummary ORDER BY StgId desc LIMIT 3 の cr カーソルを宣言します。
見つからない場合の継続ハンドラを宣言し、done = 1 を設定します。

-- カーソルを開きます open cr;
テストループ:ループ
	-- 結果を取得するには、cr を c_stgName、c_stgId に取得します。
	完了 = 1 の場合
		テストループを終了します。 
	終了の場合; 
	
  
  c_stgName、c_stgIdを選択します。
	
END LOOP testLoop;
-- カーソルを閉じます close cr;

終わり;
一時テーブルが存在する場合は削除します。StgSummary;
終わり;

最初に一時テーブルを作成し、カーソルを定義します。しかし、ストアド プロシージャは保存できません。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE ... (Declare ステートメントはBEGIN...ENDステートメント内でのみ使用でき、最初の行に表示する必要があります)。したがって、最終的にはBEGIN...ENDのペアを追加してそれらを分離することしかできません。

要約する

以前、SQL Server ストアド プロシージャを書いたときは、この問題にあまり注意を払っていませんでした。変数はプログラムの途中で定義することが多く、MySQL を当然のこととして何気なく書いていたため、最終的に落とし穴に陥ってしまいました。両者の間には文法的な違いはほとんどありませんが、実際に違いに遭遇すると、かなり衝撃を受けます。しかし、長い間 SQL 文を書いていないので、少し鈍感になっています。ピットを素早く書き留めて、印象を深める方が良いです。

上記は、MySQL ストアド プロシージャでカーソル ループを使用して一時テーブルを読み取る方法の詳細です。MySQL カーソル ループを使用して一時テーブルを読み取る方法の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャ カーソル ループの使用の概要
  • MySQL ストアド プロシージャでカーソル ループを終了して継続する例
  • カーソルを使用したMySQLストアドプロシージャネストループのサンプルコード
  • MySQL ストアド プロシージャでカーソルを使用する例
  • MySQL 動的カーソル学習 (MySQL ストアド プロシージャ カーソル)
  • MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明
  • MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明
  • Mysql ストアド プロシージャでカーソルを使用する例
  • MySql ストアド プロシージャとカーソルの使用例

<<:  Vueにおけるキーの役割と原理の詳細な説明

>>:  docker を使用して Kong クラスター操作を構築する

推薦する

Vueはキャンバスの手書き入力を使用して中国語を認識します

効果画像: 序文:最近、屋外の大画面プロジェクトに取り組んでいました。システムの入力方法は使いにくか...

Dockerはローカルイメージをパッケージ化し、他のマシンに復元します

1. docker imagesを使用して、このマシン上のすべてのイメージファイルを表示します。 2...

開発環境にUbuntu 16をインストール後の初期設定

オフィスでは、Linux 開発環境として Ubuntu システムが必要です。現在、Ubuntu 16...

太字の <b> と <strong> の違いの分析

私たちウェブマスターは皆、ウェブサイトを最適化する際に記事内のキーワードを太字にすることが最適化に非...

Webstorm と Chrome を使用して Vue プロジェクトをデバッグする方法

目次序文1. 新しいVueプロジェクトを作成する2. WebStormの設定1. デバッガポートを設...

ウェブページ内のFlash SWFファイルを変更する方法

これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...

Win10でのJDKのインストールと環境変数の設定に関する詳細なチュートリアル

目次序文1. 準備2. インストール3. 環境変数を設定する1. 「新規」をクリックすると、ポップア...

フレームセットの共通プロパティ(フレームとウィンドウの分割)

フレームとは、Web ページ画面を複数のフレームに分割したもの(複数の Web ページという形で表示...

CentOS7.6にMYSQL8.0をインストールする詳細な手順

1. 一般的に、CentOS では mariadb がデフォルトでインストールされているため、まず ...

win10 での mysql 8.0.16 winx64 インストールの最新グラフィック チュートリアル

このデータベースをダウンロードするには、多くの時間とトラフィックがかかります。踏み込んだ落とし穴で時...

印刷広告を成功させるための「3I」基準

国内の多くの広告主にとって、印刷広告の制作と評価は、しばしばかなり主観的です。自分の感情や美的感覚に...

MySQLの大文字と小文字の区別によって発生する問題の分析

MYSQLは大文字と小文字を区別します言葉を見れば信じられます。タイトルを見れば内容がわかります。 ...

JSで実施された機雷掃海プロジェクトの概要

この記事では、JS掃海プロジェクトの概要を参考までに紹介します。具体的な内容は次のとおりです。プロジ...

テーブル編集操作を実現する js+Html

この記事では、テーブルの編集操作を実現するためのjs+Htmlの具体的なコードを参考までに共有します...

ubuntu20.04 LTSにdockerをインストールする方法

ゼロ: 古いバージョンをアンインストールするDocker の古いバージョンは、docker、dock...