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で権限が拒否された場合の解決策の詳細な説明

推薦する

タイプファイルの入力ボタン機能の研究

<br />一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると[フ...

Linux sar コマンドの使用方法とコード例の分析

1. CPU使用率sar -p (一日中表示) sar -u 1 10 (1: 1秒ごと、10: 1...

MySQL の重要なログファイルの包括的なインベントリ

目次導入ログ分類パラメータファイルエラーログファイル完全なログファイルスロークエリログバイナリログフ...

読み取り専用と無効の違い

要約すると: Readonly は入力 (テキスト/パスワード) とテキスト領域に対してのみ有効です...

Angularの親子コンポーネント通信の詳細な説明

目次概要1. 入力および出力プロパティの概要2. 入力属性3. プロパティバインディングは親コンポー...

CSS3 で King of Glory マッチング人員読み込みページを実装する方法

King of Glory をプレイしたことがある人なら、このページの効果をよくご存知でしょう。なぜ...

MySQLトリガートリガー例の詳細な説明

目次トリガーとは何かトリガーを作成する表は次のようになります。さらにいくつかの単語を挙げます。制限と...

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

MySQL ビューの原則分析

目次更新可能なビュービューのパフォーマンスビューの制限ビューは MySQL 5.0 以降で導入されま...

MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

目次1. MySQLトリガーの作成: 1. MySQLトリガー作成構文: 2. MySQL作成構文の...

SQL の左結合と右結合の原理と例の分析

テーブルが 2 つあり、テーブル A のレコードがテーブル B に存在しない可能性があります。左結合...

mysql5.7.18 解凍バージョンで mysql サービスを起動します

mysql5.7.18の解凍版はmysqlサービスを起動します。具体的な内容は以下のとおりです。 1...

Mysql 5.7.18 MySQL proxies_priv を使用して同様のユーザーグループ管理を実装する

MySQL proxies_priv(シミュレートされたロール)を使用して同様のユーザーグループ管理...

Doubanウェブサイトのウェブサイトコンテンツに小さな変更を加える方法

<br />読みやすさはウェブサイトにとって非常に重要な部分であり、ウェブサイトの核心と...

JavaScriptオブジェクトをマージするさまざまな方法の詳細な説明

目次オブジェクトをマージするさまざまな方法(インターフェースを通じてデータを取得し、それをローカル ...