mysqlのストレージ・プロシージャ、カーソル、トランザクション・インスタンスの詳細
3464 ワード
mysqlのストレージ・プロシージャ、カーソル、トランザクション・インスタンスの詳細
以下は自分が作成したmysqlデータベースのストレージプロセスで、アーカイブとして残しておき、後で使うときに参考にします.
ストレージ・プロシージャ、カーソル(2階層ループ)、トランザクションに関連します.
【説明】:コードのコメントは、当時のビジネスにのみ適用され、無視する必要はありません.
コードは次のとおりです.
以上はmysqlのストレージプロセス、カーソル、事務の説明です.質問があれば、伝言を残したり、当駅のコミュニティで討論したりしてください.読書に感謝しています.皆さんを助けてほしいです.当駅のサポートに感謝します.
以下は自分が作成したmysqlデータベースのストレージプロセスで、アーカイブとして残しておき、後で使うときに参考にします.
ストレージ・プロシージャ、カーソル(2階層ループ)、トランザクションに関連します.
【説明】:コードのコメントは、当時のビジネスにのみ適用され、無視する必要はありません.
コードは次のとおりです.
DELIMITER $$
DROP PROCEDURE IF EXISTS `transferEmailTempData`$$
CREATE PROCEDURE transferEmailTempData(IN jobId VARCHAR(24))
BEGIN
DECLARE idval VARCHAR(24) DEFAULT '';
DECLARE taskIdval VARCHAR(24) DEFAULT '';
DECLARE groupIdval VARCHAR(24) DEFAULT '';
DECLARE emailval VARCHAR(50) DEFAULT '';
/* , :groupId、email */
DECLARE infoId VARCHAR(24) DEFAULT '';
/* */
DECLARE err INT DEFAULT 0;
/* , */
DECLARE counts INT DEFAULT 0;
/* */
DECLARE isrollback INT DEFAULT 0;
/* , */
DECLARE done INTEGER DEFAULT 0;
/* */
DECLARE cur CURSOR FOR SELECT id,taskId,groupId,email FROM `t_email_data_temp` WHERE taskId=jobId;
/* id、email */
DECLARE cur2 CURSOR FOR SELECT id FROM `t_email_info` e WHERE e.`group_id` = groupIdval AND e.`email_address` = emailval;
/* , 1, */
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1;
/* */
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET done=1;
/* */
START TRANSACTION;
/* */
OPEN cur;
/* LOOP */
out_loop:LOOP
/* */
FETCH cur INTO idval,taskIdval,groupIdval,emailval;
IF done = 1 THEN
LEAVE out_loop;
END IF;
/* */
OPEN cur2;
SET done = 0;
FETCH cur2 INTO infoId;
/* groupId and email , */
IF done = 1 THEN
/* */
INSERT INTO `t_email_info` VALUES(idval,emailval,groupIdval,0,'',NOW(),'admin',NOW(),'admin');
/* */
DELETE FROM `t_email_data_temp` WHERE id = idval;
/* , 1000 */
SET counts = counts + 1;
/* , */
IF err=1 THEN
SET isrollback=1;
ROLLBACK;
ELSE
IF counts = 1000 THEN
COMMIT;
/* 1000 , */
SET counts=0;
END IF;
END IF;
ELSE
/* , */
IF done=0 THEN
DELETE FROM `t_email_data_temp` WHERE id = idval;
END IF;
END IF;
FETCH cur2 INTO infoId;
CLOSE cur2;
/* , , */
SET done=0;
END LOOP out_loop;
CLOSE cur;
/* , task */
/* , task , , */
IF isrollback=0 THEN
UPDATE `t_email_task` t SET t.`if_finish` = 1 WHERE t.`id`=jobId;
END IF;
END$$
DELIMITER ;
以上はmysqlのストレージプロセス、カーソル、事務の説明です.質問があれば、伝言を残したり、当駅のコミュニティで討論したりしてください.読書に感謝しています.皆さんを助けてほしいです.当駅のサポートに感謝します.