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. 親コンテナーをテーブルに設定し、子をインライン要素に設定します。テキストを表示するサブコンテン...
Promise は、ES6 で導入された非同期プログラミングのための新しいソリューションです。 Pr...
Vue $http get および post リクエストのクロスドメイン問題まずconfig/ind...
目次序文1. グローバル統合オーバーライドを使用する2. .vueファイルを変更する3. コンポーネ...
1 はじめに「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記...
LinuxにRedisをインストールしたら、Javaを使って接続します。Javaコードは次のとおりで...
目次tomcatをデプロイする1.ダウンロードして解凍する2. 設定ファイルを変更する移植プロジェク...
1. DockerでのPostgresデータベースのバックアップ注文: docker exec it...
1. はじめに: mysql8以降は、これまでよく使われていたバージョンと比べてかなり変更点が大きい...
Mysqldump は MySQL の論理バックアップに使用されます。高速ではありませんが、柔軟性が...
場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...
実験環境最小限にインストールされた CentOS 7.3 仮想マシン基本環境を構成する1. ngin...
flex は 2009 年のリリース以来、ほぼすべてのブラウザでサポートされています。シンプルでレス...
目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...