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で権限が拒否された場合の解決策の詳細な説明
この記事では、Web ページを作成する前に確認すべき、いわゆる仕様をいくつかまとめました。皆様のお役...
序文元のプロジェクトは、パブリックネットワークgitlabに配置されていました。セキュリティ上の理由...
一般的に、リストには選択機能があり、単一選択、二重選択、複数選択が非常に一般的です。カスタム ループ...
前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...
あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...
ZFSの歴史Z ファイル システム (ZFS) は、2001 年に Matthew Ahrens と...
キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...
目次DOMノード要素ノード:テキストノード:プロパティ ノード:要素を取得getElementByI...
最近、自宅サーバーにクラウドディスクを導入する予定なので、一連の環境構築作業を始めました。MySQL...
目次序文バブルソート基本アルゴリズム2 番目の書き方は、基本的なアルゴリズムに基づいて改良されていま...
HTML のフォームを使用して、ユーザーからさまざまな種類の入力情報を収集できます。フォームは、実際...
<br />かつて、仏印と東坡氏が仏教について雑談していたとき、東坡氏が突然こう言った。...
この記事では、参考までに、簡単な計算機機能を実現するためのVueの具体的なコードを紹介します。具体的...
1. 使用バージョンバイト:2.0 ant-design-vue: 2.0.0-rc.8ヴュー:3...
コードをコピーコードは次のとおりです。 <a href=# title="ここに表示...