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 のストアド プロシージャ、カーソル、トランザクションについての説明です。ご質問がある場合は、メッセージを残すか、このサイトのコミュニティで議論してください。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: タブ切り替え機能を実装するJavaScriptカスタムプラグイン
>>: Linuxで権限が拒否された場合の解決策の詳細な説明
1. Windows 版の Docker をインストールしたら、Docker クイックスタート ター...
Nginxは正規表現を使用して、ワイルドカードドメイン名をディレクトリに自動的に一致させます。 Ng...
MySQL 8.0圧縮パッケージのインストール方法、詳細は次のとおりです知らせ:オペレーティング シ...
ここでは、MySQL の使用中に発生するいくつかの問題とその解決策を示します。 sql_mode=o...
目次必要:アイデア:レッスン:テキストを共有する:要約する必要:インターフェイスからサブメニュー デ...
目次本質的な違いデータベースセキュリティ権限スキーマの移行パターンオブジェクトの類似性スキーマオブジ...
この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...
1. ワンストップソリューション1. 問題の分析と特定 # MySQL設定ファイルを見つけて、MyS...
Alibaba Cloud ServerはTomcatをインストールして構成し、外部ネットワークアク...
目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...
1. Alibaba Cloudは、個人のニーズに応じて適切なクラウドサーバーを選択し、CPU、メ...
React Native は、プルアップとプルダウンの監視ジェスチャを実装します。詳細なコアコードは...
目次Vue2.x の使用法グローバル登録部分登録使用フック機能フック関数のパラメータVue3.x の...
目次はじめるデータストレージサーバーを構成するRedis セキュリティの管理Redisインストールの...
1. 要素の幅/高さ/パディング/マージンのパーセンテージ基準要素の幅/高さ/パディング/マージンの...