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で権限が拒否された場合の解決策の詳細な説明
目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...
検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...
MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 ...
Docker の人気と成熟に伴い、Docker は徐々にプロジェクトをデプロイするための第一の選択肢...
1.リスナーを見る時計のご紹介 'vue' から { ref, reactive, ...
地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメ...
1. データ重複排除日常業務では、Hive や Impala を使用してクエリとエクスポートを行う際...
今日のキャンパス採用筆記試験では、固定された最初の行と最初の列を実装し、幅をウィンドウの変更に適応さ...
Discuz! フォーラムにはバックグラウンドで多くの設定オプションがあり、これらの設定オプションを...
ブロガーはこう述べています。「私は『史上最も簡単な MySQL チュートリアル』という一連のブログ記...
初回の読み込みを高速化できるルートの遅延読み込みをどうして忘れられるでしょうか?ルーティングの遅延読...
1. フォームテキスト入力のモバイル選択: テキスト入力フィールドにプロンプトが追加されている場...
目次React Fiberとは何ですか?なぜReact Fiberなのか? React Fiberは...
シンプルな Linux 推測ゲームのソースコードゲームのルール:数字当てゲームは通常 2 人でプレイ...
この記事では、 Webデザインに関連するこれら4 つの原則について説明します。これら4 つの原則を念...