カーソル ループを使用して、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 クラスター操作を構築する

推薦する

CSS スタイルを変更してグレーの Web ページ (色なし、明るい白黒のみ) を実現するいくつかの方法

通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...

Reactのコンポーネント共同利用実装

目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...

CSSメディアクエリのアスペクト比を小さくする方法

CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...

MySQL の group by に関する簡単な説明

目次1. はじめに2. ユーザーテーブルを準備する2.1 グループ化ルール2.2 グループの使用2....

MySQL スロークエリ関連パラメータの原理の分析

MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるロ...

MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します

目次1. 制約の概念と分類2. 5つの制約の追加と削除2.1 制約を追加する6つの方法2.2 制約を...

JavaScriptエンジンV8の実行プロセスの詳細な説明

目次1. V8ソース2. V8サービスターゲット3. V8の初期アーキテクチャIV. V8の初期アー...

表示しているページのスナップショットを Baidu が保存できないように設定する方法

今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...

PSSHを使用してLinuxサーバーを一括管理する

pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...

泡の小さな鋭角効果を実現するCSS

効果画像(境界線の色が薄すぎるので、{} で囲みます): { }参考リンク Pure CSS バブル...

CSS でよく使用されるフォントサイズ、フォント単位、行の高さの詳細な説明

px(ピクセル)ピクセルという言葉は皆さんもよくご存知だと思います。次に、この単位に関するちょっとし...

MySql クイック挿入数千万の大規模データの例

データ分析の分野では、データベースは私たちの強力な助けとなります。クエリ時間を受け入れるだけでなく、...

HTML/CSSにおける記号論の詳細な説明

この記事では、ソシュールの言語哲学などの理論に基づいて、CSS の class 属性は不要であると主...

カルーセル効果を実現するためのネイティブJavaScript+CSS

この記事では、参考までに、カルーセル効果の具体的なコードをJavaScript+CSSを使用して実装...

メタタグの詳しい説明(メタタグの役割)

個人のウェブサイトがどんなに素晴らしいものであっても、サイバースペースの広大な海に浮かぶ小さなボート...