日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

mysql存儲過程多層游標循環嵌套的寫法分享

瀏覽:72日期:2023-07-05 19:48:16
目錄mysql存儲過程多層游標循環嵌套的寫法最近有遇到一個需求最終存儲過程的寫法如下mysql存儲過程循環中使用游標方法及遇到的問題循環循環無法正常退出問題總結mysql存儲過程多層游標循環嵌套的寫法最近有遇到一個需求

將有3級主從關聯的表數據同步到另外一個有3級主從關聯的表中,同步數據的表是第3級子表,而關聯關系在第1、2級主表中,由于考慮到到內網數據庫可能沒法直接訪問的限制,所以沒有用代碼來實現,而是直接用存儲過程來實現

最終存儲過程的寫法如下DELIMITER $$USE `myDb`$$DROP PROCEDURE IF EXISTS `syncBomSopFromRouteSop`$$CREATE PROCEDURE `syncBomSopFromRouteSop`(IN tenantId BIGINT(11))BEGIN?? ?#工藝路線ID?? ?DECLARE crId BIGINT(11);?? ?#生產bomID?? ?DECLARE pbrId BIGINT(11);?? ?#工序檔案ID?? ?DECLARE processId VARCHAR(50);?? ?#生產bom工序Id?? ?DECLARE bomProcessId BIGINT(11);?? ?#生產bom數量?? ?DECLARE productionBomNum INT(5);?? ?#生產bom工序數量?? ?DECLARE productionBomProcessNum INT(5);?? ?DECLARE i INT(4) DEFAULT 1;?? ?#DECLARE j INT(4) DEFAULT 1;?? ?#定義生產bom游標?? ?DECLARE productionBomCursor CURSOR FOR (?? ??? ?SELECT cr_id,pbr_id FROM jgmes_modeling_production_bom_route WHERE tenant_id=tenantId AND delete_flag=0 AND IFNULL(cr_id,'')<>'' ORDER BY cr_id,pbr_id /*測試1條數據AND pbr_id=86673*/??? ?);?? ?#定義生產bom工序游標?? ?DECLARE bomProcessCursor CURSOR FOR (?? ??? ?SELECT pbp_id bomProcessId,p.p_id processId?? ??? ?FROM jgmes_modeling_production_bom_process pbp??? ??? ?LEFT JOIN jgmes_modeling_process p ON p.p_id=pbp.p_id?? ??? ?LEFT JOIN jgmes_modeling_production_bom_route pbr ON pbr.pbr_id=pbp.pbr_id?? ??? ?WHERE pbp.tenant_id=tenantId AND pbp.delete_flag=0 AND??? ??? ?pbr.tenant_id=tenantId AND pbr.delete_flag=0 AND pbr.pbr_id=pbrId /*測試1條生產bom */?? ?);?? ?#定義生產bom的sop游標?? ?/*DECLARE bomSopCursor CURSOR FOR (?? ?);*/?? ?#解決沒有查到數據報:“DECLARE CONTINUE HANDLER FOR NOT FOUND SET @IS_FOUND=0;”的異常的處理方法?? ?DECLARE CONTINUE HANDLER FOR NOT FOUND SET @IS_FOUND=0;?? ?SELECT COUNT(*) INTO productionBomNum FROM jgmes_modeling_production_bom_route WHERE tenant_id=tenantId AND delete_flag=0 AND IFNULL(cr_id,'')<>''/*測試1條數據 AND pbr_id=86673*/;?? ?SET @creationDate=NOW();?? ?TRUNCATE TABLE a;?? ?##打開生產bom游標?? ?OPEN productionBomCursor;?? ??? ?/* 生產bom循環開始 */?? ??? ? FETCH productionBomCursor INTO crId,pbrId;?? ??? ? WHILE i<=productionBomNum DO?? ??? ? ? ?SELECT COUNT(*) INTO productionBomProcessNum FROM jgmes_modeling_production_bom_process WHERE tenant_id=tenantId AND delete_flag=0 AND pbr_id=pbrId;?? ??? ? ? ?#第2層循環?? ??? ? ? ?#打開生產bom工序游標?? ??? ? ? ?OPEN bomProcessCursor;?? ??? ??? ?FETCH bomProcessCursor INTO bomProcessId,processId;?? ??? ??? ?SET @j=1; ??? ??? ??? ?WHILE @j<=productionBomProcessNum DO?? ??? ??? ?INSERT INTO a (seqNum, remark)VALUES(CONCAT(i,'_',@j,'_',bomProcessId), 'i-j-bomProcessId');?? ??? ??? ??? ?#INSERT INTO a (seqNum, remark)VALUES(CONCAT(crId,'_',processId), 'crProcessId');?? ??? ??? ??? ?#刪除生產bom工序下面的sop表記錄?? ??? ??? ??? ?UPDATE jgmes_modeling_production_sop SET delete_flag=1 WHERE tenant_id=tenantId AND delete_flag=0 AND pbp_id=bomProcessId;?? ??? ??? ??? ?#將生產bom工序對應工藝路線工序下面的sop文件復制插入?? ??? ??? ??? ?INSERT INTO jgmes_modeling_production_sop (?? ??? ??? ??? ? ?pbr_id,?? ??? ??? ??? ? ?pbp_id,?? ??? ??? ??? ? ?sn,?? ??? ??? ??? ? ?file_name,?? ??? ??? ??? ? ?file_path,?? ??? ??? ??? ? ?file_type,?? ??? ??? ??? ? ?file_length,?? ??? ??? ??? ? ?file_version_num,?? ??? ??? ??? ? ?tenant_id,?? ??? ??? ??? ? ?creation_date,?? ??? ??? ??? ? ?created_by,?? ??? ??? ??? ? ?last_update_date,?? ??? ??? ??? ? ?last_updated_by,?? ??? ??? ??? ? ?last_update_login,?? ??? ??? ??? ? ?delete_flag,?? ??? ??? ??? ? ?version_num?? ??? ??? ??? ?)?? ??? ??? ??? ?SELECT?? ??? ??? ??? ? ?pbrId,?? ??? ??? ??? ? ?bomProcessId,?? ??? ??? ??? ? ?sn,?? ??? ??? ??? ? ?file_name,?? ??? ??? ??? ? ?file_path,?? ??? ??? ??? ? ?file_type,?? ??? ??? ??? ? ?file_length,?? ??? ??? ??? ? ?file_version_num,?? ??? ??? ??? ? ?sop.tenant_id,?? ??? ??? ??? ? ?@creationDate,?? ??? ??? ??? ? ?-1,?? ??? ??? ??? ? ?sop.last_update_date,?? ??? ??? ??? ? ?sop.last_updated_by,?? ??? ??? ??? ? ?sop.last_update_login,?? ??? ??? ??? ? ?sop.delete_flag,?? ??? ??? ??? ? ?sop.version_num?? ??? ??? ??? ?FROM?? ??? ??? ??? ? ?jgmes_modeling_crafts_sop ?sop?? ??? ??? ??? ?LEFT JOIN jgmes_modeling_crafts_process cp ON cp.cp_id=sop.cp_id?? ??? ??? ??? ?LEFT JOIN jgmes_modeling_process p ON p.p_id=cp.p_id?? ??? ??? ??? ?WHERE sop.tenant_id=tenantId AND sop.delete_flag=0 AND cp.cr_id=crId AND cp.p_id=processId;?? ??? ??? ??? ?#游標下移?? ??? ??? ??? ?FETCH bomProcessCursor INTO bomProcessId,processId;?? ??? ??? ??? ?SET @j=@j+1;?? ??? ??? ?END WHILE;?? ??? ? ? ?CLOSE bomProcessCursor;?? ??? ? ? ?#游標下移?? ??? ? ? ?FETCH productionBomCursor INTO crId,pbrId;?? ??? ? ? ?SET i=i+1;?? ??? ? END WHILE;?? ??? ?/*生產bom循環結束*/?? ?##關閉游標?? ?CLOSE productionBomCursor;?? ??? ?#返回新同步的數據?? ?SELECT * FROM jgmes_modeling_production_sop WHERE tenant_id=tenantId AND delete_flag=0 AND creation_date=@creationDate AND created_by=-1;END$$DELIMITER ;

剛開始寫完執行時,

報了一個“DECLARE CONTINUE HANDLER FOR NOT FOUND SET @IS_FOUND=0;”的錯誤

后面加了如下語句就正常了:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET @IS_FOUND=0;

由于存儲過程調試不太方便,其中a表是用來調試用的臨時表,調試完成后可以刪除

CREATE TABLE `a` (? `id` bigint(11) NOT NULL AUTO_INCREMENT,? `seqNum` varchar(50) DEFAULT NULL,? `remark` varchar(100) DEFAULT NULL,? PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10722 DEFAULT CHARSET=utf8mb4mysql存儲過程循環中使用游標方法及遇到的問題

Oracle開發9年,頻繁使用存儲過程。現轉到mysql,使用存儲過程還是不太習慣,語法差別比較大,而且沒有深入去了解過mysql的存儲過程語法。

現在公司有部分數據需要通過存儲過程處理,只能硬著頭皮上了。

循環

與oracle 用法基本一樣,使用loop或者while

首先定義一個游標

DECLARE rs CURSOR FOR?? SELECT?? ??? ?contract_id?? ?FROM?? ??? ?data_sale_contract_delay?? ?WHERE FLAG IS NULL or FLAG= '';

在游標定義后面要定義一個如果游標移動到最后一行數據后再次移動后處理的語句.

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1 ;

這個語句的含義是在fetch 不到內容時,將變量done 賦值為1.用來做跳出循環判斷用.

此處與Oracle不同,Oracle會更簡單,直接exit when v_cur%notfound;就可以跳出循環.v_cur是游標的名字.

接下來打開游標,遍歷:

OPEN rs;FETCH NEXT FROM rs INTO v_contract_id;WHILE (done<>1) DO?... ? ?-- 處理邏輯省略? FETCH NEXT FROM rs INTO v_contract_id;-- 處理完成后直接再從游標讀取下一條數據,如果已是最后一條數據,再fetch時會出發上面的 CONTINUE HANDLER,將變量done 值改成1END WHILE;CLOSE rs;循環無法正常退出問題

由于while中使用了select XX into XX from XXX的這種賦值語句在 select 的時候,沒查到數據,導致出發handler將done修改為1,然后光標就會跳出循環。

或者多層循環嵌套時內循環出現將done修改為1的情況。

以上這兩種情況,都是因為CONTINUE HANDLER把done更新造成的,如果遇到此類問題,需要在每次可能出現done被改變的地方處理完邏輯后增加set done=0;把變量值改一下,這樣就可以繼續執行了。

總結

這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品三区视频| 婷婷综合六月| 美女视频网站久久| 91精品二区| 亚洲免费黄色| 日韩欧美一区二区三区免费看| 国产欧美日韩精品一区二区免费| 色综合视频一区二区三区日韩 | 国产中文欧美日韩在线 | 91久久黄色| 亚洲欧美日韩综合国产aⅴ| 激情欧美一区二区三区| 悠悠资源网久久精品| 国产拍在线视频| 日韩欧美美女在线观看| 欧美一区网站| 日本精品另类| 国产精品视频一区二区三区| 在线亚洲激情| 999视频精品| 日韩三区免费| 亚洲成人国产| 欧美 日韩 国产精品免费观看| 女人天堂亚洲aⅴ在线观看| 激情婷婷亚洲| 亚洲在线电影| 中文精品在线| 天堂va欧美ⅴa亚洲va一国产| 亚州国产精品| 国产日韩一区| 日韩电影免费网站| av高清一区| 麻豆mv在线观看| 国产精品.xx视频.xxtv| 欧美精品1区| 色天使综合视频| 欧美二区视频| 六月天综合网| 国产精品第一| 成人午夜精品| 欧美国产91| 最新国产精品| 国产精品www.| 婷婷激情综合| 日韩中文av| 91精品韩国| 99国产精品99久久久久久粉嫩| 天使萌一区二区三区免费观看| 亚洲欧洲国产精品一区| 国产精品丝袜在线播放| 在线观看精品| 国产偷自视频区视频一区二区| 日韩视频一区| 国产色99精品9i| 国内一区二区三区| 久草免费在线视频| 伊人成人在线视频| 日韩动漫一区| 国产96在线亚洲| 激情五月综合网| 午夜精品福利影院| 国产夫妻在线| 免费美女久久99| 日韩欧美三区| 日韩精品免费一区二区在线观看 | 日韩在线综合| 天堂成人免费av电影一区| 欧美激情日韩| 999久久久精品国产| 日韩专区欧美专区| 国产精品亚洲产品| 久久美女精品| 午夜亚洲福利| 成人羞羞视频播放网站| 美国三级日本三级久久99| 日韩影院二区| 性欧美69xoxoxoxo| 国产欧美69| 久久亚洲影院| 美腿丝袜亚洲三区| 黄色亚洲精品| 日韩欧美一区二区三区在线视频| 天堂av在线一区| 麻豆一区二区三区| 男人的天堂久久精品| 精品国产欧美日韩| 蜜桃视频在线观看一区| 亚洲午夜黄色| 久久精品99国产国产精| 国产精品av久久久久久麻豆网| 国际精品欧美精品| 亚洲资源av| 精品国产亚洲一区二区三区大结局| 日韩综合小视频| 免费av一区二区三区四区| 麻豆成人综合网| 日本免费一区二区视频| 欧美日韩三区| 97在线精品| 国产一区二区视频在线看| 亚洲2区在线| 欧美/亚洲一区| 欧美亚洲精品在线| 国产在线观看91一区二区三区| 亚洲va久久| 亚洲国内精品| 精品午夜视频| 欧美日韩国产高清| 国产精品精品国产一区二区| 综合一区二区三区| 午夜一级在线看亚洲| 秋霞国产精品| 国产一区二区亚洲| 精品欧美日韩精品| 国产亚洲欧美日韩精品一区二区三区| 国产精品日韩久久久| 欧美特黄一区| 日韩不卡在线| 国产一区二区三区视频在线| 精品三区视频| 国产精品一区二区免费福利视频| 在线视频免费在线观看一区二区| 国产精品91一区二区三区| 精品三级久久久| 国产精品毛片久久久| 国产香蕉精品| 日韩福利视频导航| 亚洲精选av| 欧美日韩一区二区三区四区在线观看 | 日本午夜精品| 免费美女久久99| 亚洲激情精品| 亚洲影视一区二区三区| 免费日韩av片| 午夜国产精品视频| 亚洲综合国产| 日韩视频在线一区二区三区| 日韩精品久久久久久久电影99爱| 免费欧美一区| 激情久久五月| 欧美+日本+国产+在线a∨观看| 亚洲激精日韩激精欧美精品| 欧美成人久久| 久久久人人人| 欧美三区四区| 久久久久久久久99精品大| 青青久久av| 久久国产欧美| 久久精品免费一区二区三区| 在线中文字幕播放| 欧美国产美女| 成人av三级| 精品亚洲美女网站| 久久亚洲精品中文字幕蜜潮电影| 99精品综合| 欧美日韩尤物久久| 免费精品视频最新在线| 日韩精品免费视频人成| 久久精品99久久无色码中文字幕| 午夜精品亚洲| 天堂网av成人| 日韩精品一二区| 久久免费视频66| 在线国产一区二区| 国产探花一区二区| 99久久视频| 欧美一级二区| 亚洲国产影院| 国产午夜一区| 久久美女精品| 国产精品一区高清| 欧美精品一区二区久久| 国产情侣久久| 久久三级视频| 国产日本亚洲| 不卡中文一二三区| 国产精品hd| 亚洲激情中文| 久久av影视| 男人的天堂亚洲一区| 国产网站在线| 97精品久久| 欧美日韩激情| 精品一区视频| 亚洲毛片网站| 91精品一区二区三区综合| 国产三级一区| 亚洲深爱激情| 日本激情一区| 91精品国产自产在线丝袜啪| 在线日韩av| 久久超碰99| 久久国产精品久久w女人spa| 电影91久久久| 日本h片久久| 一区在线观看| 青青青免费在线视频| 国产精品综合| 在线免费观看亚洲| 136国产福利精品导航网址|