麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > MySQL > 正文

mysql的存儲過程、游標 、事務實例詳解

2024-07-24 13:14:09
字體:
來源:轉載
供稿:網友

mysql的存儲過程、游標 、事務實例詳解

下面是自己曾經編寫過的mysql數據庫存儲過程,留作存檔,以后用到的時候拿來參考。

其中,涉及到了存儲過程、游標(雙層循環)、事務。

【說明】:代碼中的注釋只針對當時業務而言,無須理會。

代碼如下:

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的存儲過程、游標 、事務的講解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深夜福利久久久 | 久久丝袜脚交足黄网站免费 | 中文字幕www. | 久久国产一级 | 国产精品99久久久久久宅女 | 日本免费aaa观看 | 国产三级在线视频观看 | 欧美成人高清视频 | 精品一区二区在线视频 | 男女羞羞在线观看 | 91性高湖久久久久久久久网站 | 日本欧美一区二区三区在线播 | 国产精品久久久久久婷婷天堂 | 毛片大全在线观看 | 久久国产精品二区 | 国产精品久久久久久久久久久久午夜 | 91久久久久久久久久久久久久 | 精品国产91久久久久久久妲己 | 欧美一级黄色片在线观看 | 久久综合狠狠综合久久 | 九九热在线免费观看视频 | 国产精品成人一区二区三区吃奶 | 免费在线观看成年人视频 | 高清中文字幕在线 | 性高湖久久久久久久久aaaaa | 日韩一级成人 | 超级av在线 | 成人福利在线播放 | 国产午夜精品久久久久久久蜜臀 | 午夜热门福利 | av噜噜在线 | 国产二区三区在线播放 | 国产18成人免费视频 | 欧洲狠狠鲁 | 热99精品视频 | 免费香蕉成视频成人网 | 精品久久久91 | 黄色免费电影网址 | 国产高潮好爽好大受不了了 | 九九热九九热 | av观看国产 |