濮阳杆衣贸易有限公司

主頁 > 知識庫 > mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)實(shí)例詳解

mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)實(shí)例詳解

熱門標(biāo)簽:寧波企業(yè)外呼系統(tǒng)收費(fèi) 地圖標(biāo)注人員兼職 ps制作地圖標(biāo)注gif 電子地圖標(biāo)注電話 扎樣申請400電話 沈陽電銷外呼系統(tǒng)原理是什么 成都優(yōu)派外呼系統(tǒng) 聊城智能外呼系統(tǒng)運(yùn)營商 上海智能外呼系統(tǒng)代理商

mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)實(shí)例詳解

下面是自己曾經(jīng)編寫過的mysql數(shù)據(jù)庫存儲(chǔ)過程,留作存檔,以后用到的時(shí)候拿來參考。

其中,涉及到了存儲(chǔ)過程、游標(biāo)(雙層循環(huán))、事務(wù)。

【說明】:代碼中的注釋只針對當(dāng)時(shí)業(yè)務(wù)而言,無須理會(huì)。

代碼如下:

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 '';
  
  /*標(biāo)識正式表是否存在一條相同數(shù)據(jù),即:groupId、email相同*/
  DECLARE infoId VARCHAR(24) DEFAULT '';
  
  /*標(biāo)識事務(wù)錯(cuò)誤*/
  DECLARE err INT DEFAULT 0;
  
  /*達(dá)到一定數(shù)量就進(jìn)行提交,計(jì)數(shù)器*/
  DECLARE counts INT DEFAULT 0;
  
  /*標(biāo)識是否回滾過*/
  DECLARE isrollback INT DEFAULT 0;
  
  /*游標(biāo)遍歷時(shí),作為判斷是否遍歷完全部記錄的標(biāo)記*/
  DECLARE done INTEGER DEFAULT 0;
  
  /*獲取臨時(shí)表該任務(wù)的數(shù)據(jù)*/
  DECLARE cur CURSOR FOR SELECT id,taskId,groupId,email FROM `t_email_data_temp` WHERE taskId=jobId;
  
  /*根據(jù)群組id、email查詢是否存在相同記錄*/
  DECLARE cur2 CURSOR FOR SELECT id FROM `t_email_info` e WHERE e.`group_id` = groupIdval AND e.`email_address` = emailval; 
  
  /* 出現(xiàn)錯(cuò)誤,設(shè)置為1,只要發(fā)生異常就回滾*/
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1;
  
  /*聲明當(dāng)游標(biāo)遍歷完全部記錄后將標(biāo)志變量置成某個(gè)值*/
  DECLARE CONTINUE HANDLER FOR NOT FOUND
  SET done=1;
  
  /*開啟事務(wù)*/
  START TRANSACTION;
  
  /*打開游標(biāo)*/
  OPEN cur;
  
  /*使用LOOP循環(huán)遍歷*/
  out_loop:LOOP
  
    /*將每一條結(jié)果對應(yīng)的字段值賦值給變量*/
    FETCH cur INTO idval,taskIdval,groupIdval,emailval;
    IF done = 1 THEN
      LEAVE out_loop;
    END IF;
    
    /*打開第二個(gè)游標(biāo)*/
    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');
        
        /*刪除臨時(shí)數(shù)據(jù)*/
        DELETE FROM `t_email_data_temp` WHERE id = idval;
        
        /*計(jì)數(shù)器,每1000條才提交*/
        SET counts = counts + 1;
        
        /*發(fā)生異常,回滾*/
        IF err=1 THEN
          SET isrollback=1;
          ROLLBACK;
        ELSE
          IF counts = 1000 THEN
            COMMIT;
            /*達(dá)到1000條提交后,重置計(jì)數(shù)器*/
            SET counts=0;
          END IF;
        END IF;
      ELSE
        /*已經(jīng)存在相同記錄,則刪除該記錄*/
        IF done=0 THEN
          DELETE FROM `t_email_data_temp` WHERE id = idval;
        END IF;
      END IF;
      FETCH cur2 INTO infoId;
    CLOSE cur2;
    
    /*控制外部的循環(huán),該步驟不能缺少,否則只循環(huán)一次就結(jié)束了*/
    SET done=0;
    
  END LOOP out_loop;
  CLOSE cur;
  
  /*如果沒有發(fā)生過回滾事件,則更新task狀態(tài)*/
  /*如果回滾過,不更新task狀態(tài),下次執(zhí)行任務(wù)的時(shí)候,會(huì)再次將剩余沒有提交的數(shù)據(jù)進(jìn)行添加到正式表*/
  IF isrollback=0 THEN
    UPDATE `t_email_task` t SET t.`if_finish` = 1 WHERE t.`id`=jobId;
  END IF;
  
  END$$

DELIMITER ;

以上就是mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)的講解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • MySQL 游標(biāo)的定義與使用方式
  • Mysql 存儲(chǔ)過程中使用游標(biāo)循環(huán)讀取臨時(shí)表
  • mysql聲明游標(biāo)的方法
  • 詳解Mysql 游標(biāo)的用法及其作用
  • mysql游標(biāo)的原理與用法實(shí)例分析
  • 帶你徹底搞懂python操作mysql數(shù)據(jù)庫(cursor游標(biāo)講解)
  • mysql存儲(chǔ)過程之游標(biāo)(DECLARE)原理與用法詳解
  • MySQL游標(biāo)概念與用法詳解
  • Mysql存儲(chǔ)過程中游標(biāo)的用法實(shí)例
  • Mysql存儲(chǔ)過程循環(huán)內(nèi)嵌套使用游標(biāo)示例代碼
  • MySQL存儲(chǔ)過程中游標(biāo)循環(huán)的跳出和繼續(xù)操作示例
  • MySQL 游標(biāo)的作用與使用相關(guān)

標(biāo)簽:咸寧 宿州 AXB 汕頭 林芝 內(nèi)江 三明 朔州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)實(shí)例詳解》,本文關(guān)鍵詞  mysql,的,存儲(chǔ),過程,游標(biāo),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)實(shí)例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql的存儲(chǔ)過程、游標(biāo) 、事務(wù)實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    甘德县| 新余市| 丹阳市| 彰武县| 平和县| 台湾省| 嘉义市| 三穗县| 上栗县| 辽阳县| 无极县| 恩施市| 津市市| 长武县| 宜州市| 喀喇沁旗| 武城县| 顺平县| 兴国县| 府谷县| 姚安县| 图木舒克市| 公安县| 景泰县| 都兰县| 滨海县| 浦江县| 青神县| 吉木萨尔县| 淄博市| 阿克陶县| 增城市| 云浮市| 新竹县| 荥经县| 宿迁市| 昂仁县| 卓资县| 卫辉市| 开化县| 静宁县|