MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明

MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明

MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明

以下は私が作成した MySQL データベース ストアド プロシージャです。アーカイブ用に保管し、将来の参照に使用します。

その中には、ストアド プロシージャ、カーソル (二重ループ)、トランザクションが含まれます。

[注意]: コード内のコメントは現在の業務のみに関するものであり、無視できます。

コードは次のとおりです。

区切り文字 $$
存在する場合はプロシージャを削除してください `transferEmailTempData`$$

CREATE PROCEDURE transferEmailTempData(IN jobId VARCHAR(24))
始める
  idval VARCHAR(24) DEFAULT '' を宣言します。
  taskIdval VARCHAR(24) DEFAULT '' を宣言します。
  groupIdval VARCHAR(24) DEFAULT '' を宣言します。
  emailval VARCHAR(50) DEFAULT '' を宣言します。
  
  /* 正式なテーブルに同一のデータがあるかどうか、つまり、groupId と email が同じかどうかを確認します */
  infoId VARCHAR(24) DEFAULT '' を宣言します。
  
  /*トランザクションエラー*/
  err INT DEFAULT 0 を宣言します。
  
  /*特定の数に達したら送信、カウンター*/
  DECLARE counts INT DEFAULT 0;
  
  /*ロールバックされたかどうかを識別する*/
  isrollback INT DEFAULT 0 を宣言します。
  
  /*カーソルが移動しているとき、すべてのレコードが移動されたかどうかを判断するためのマークとして使用されます*/
  done INTEGER DEFAULT 0 を宣言します。
  
  /*一時テーブル内のタスクのデータを取得します*/
  DECLARE cur CURSOR FOR SELECT id,taskId,groupId,email FROM `t_email_data_temp` WHERE taskId=jobId;
  
  /*グループ ID とメールに基づいて同一のレコードがあるかどうかを照会します*/
  DECLARE cur2 CURSOR FOR SELECT id FROM `t_email_info` e WHERE e.`group_id` = groupIdval AND e.`email_address` = emailval; 
  
  /* エラーが発生すると 1 に設定され、例外が発生する限りロールバックされます */
  SQLEXCEPTION SET err=1 の CONTINUE ハンドラーを宣言します。
  
  /*カーソルがすべてのレコードをトラバースするときに、フラグ変数が特定の値に設定されることを宣言します*/
  見つからない場合の継続ハンドラを宣言する
  完了=1を設定します。
  
  /*トランザクションを開始*/
  トランザクションを開始します。
  
  /*カーソルを開く*/
  オープンcur;
  
  /*ループするにはLOOPを使用します*/
  ループ
  
    /*各結果に対応するフィールド値を変数に代入します*/
    cur を idval、taskIdval、groupIdval、emailval に FETCH します。
    完了 = 1 の場合
      out_loopを終了します。
    終了の場合;
    
    /*2番目のカーソルを開く*/
    オープンcur2;
      SET 完了 = 0;
      cur2 を infoId にフェッチします。
      
      /*公式テーブルに同じグループ ID とメール レコードがない場合は、公式テーブルに追加します*/
      完了 = 1 の場合
      
        /*正式なテーブルに挿入*/
        `t_email_info` に VALUES(idval,emailval,groupIdval,0,'',NOW(),'admin',NOW(),'admin') を挿入します。
        
        /*一時データを削除*/
        id = idval; の場合、`t_email_data_temp` から削除します。
        
        /*カウンター、1000 項目ごとに送信*/
        SET カウント = カウント + 1;
        
        /*例外が発生しました。ロールバック*/
        エラー=1の場合
          isrollback=1 を設定します。
          ロールバック;
        それ以外
          カウントが1000の場合
            専念;
            /* 1000 件の送信に達したら、カウンターをリセットします */
            counts=0 に設定します。
          終了の場合;
        終了の場合;
      それ以外
        /*同じレコードがすでに存在する場合は削除します*/
        完了=0の場合
          id = idval; の場合、`t_email_data_temp` から削除します。
        終了の場合;
      終了の場合;
      cur2 を infoId にフェッチします。
    cur2 を閉じます。
    
    /*外部ループを制御します。このステップは省略できません。省略すると、1 回のループで終了します*/
    完了=0に設定します。
    
  ループ終了 out_loop;
  閉じるcur;
  
  /*ロールバックイベントが発生していない場合は、タスクステータスを更新します*/
  /*タスクがロールバックされ、タスクステータスが更新されない場合、残りのコミットされていないデータは、次回タスクが実行されたときに正式なテーブルに再度追加されます*/
  isrollback=0の場合
    `t_email_task` t を更新し、t.`if_finish` = 1 を設定します。WHERE t.`id`=jobId;
  終了の場合;
  
  終わり$$

区切り文字 ;

上記は、MySQL のストアド プロシージャ、カーソル、トランザクションについての説明です。ご質問がある場合は、メッセージを残すか、このサイトのコミュニティで議論してください。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

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

<<:  タブ切り替え機能を実装するJavaScriptカスタムプラグイン

>>:  Linuxで権限が拒否された場合の解決策の詳細な説明

推薦する

WeChatアプレットのスケルトン画面の実装例

目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

MySQL グリーンバージョン設定コードと 1067 エラーの詳細

MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 &#...

docker を使用して Django テクノロジー スタック プロジェクトをデプロイする方法

Docker の人気と成熟に伴い、Docker は徐々にプロジェクトをデプロイするための第一の選択肢...

vue3 watch と watchEffect の使い方と違い

1.リスナーを見る時計のご紹介 'vue' から { ref, reactive, ...

N キロメートル以内のデータを検索する MySQL の簡単な例

地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメ...

Linux でのファイル コンテンツの重複排除と交差と差異の実装

1. データ重複排除日常業務では、Hive や Impala を使用してクエリとエクスポートを行う際...

表の最初の行と最初の列を固定し、適応型ウィンドウを実現するための CSS の例コード

今日のキャンパス採用筆記試験では、固定された最初の行と最初の列を実装し、幅をウィンドウの変更に適応さ...

Discuz! フォーラムに設定オプションを追加する方法

Discuz! フォーラムにはバックグラウンドで多くの設定オプションがあり、これらの設定オプションを...

MySQL 5.7.17 のインストールと設定のグラフィックチュートリアル

ブロガーはこう述べています。「私は『史上最も簡単な MySQL チュートリアル』という一連のブログ記...

Vue 実践における実用的な小さな魔法のまとめ

初回の読み込みを高速化できるルートの遅延読み込みをどうして忘れられるでしょうか?ルーティングの遅延読...

ウェブフォームデザインのための5つの実用的なヒント

1. フォームテキスト入力のモバイル選択: テキスト入力フィールドにプロンプ​​トが追加されている場...

React Fiberの仕組みの詳細な説明

目次React Fiberとは何ですか?なぜReact Fiberなのか? React Fiberは...

Linuxは数字当てゲームのソースコードを実装する

シンプルな Linux 推測ゲームのソースコードゲームのルール:数字当てゲームは通常 2 人でプレイ...

クリーンで美しいウェブデザインのための4つの原則

この記事では、 Webデザインに関連するこれら4 つの原則について説明します。これら4 つの原則を念...