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

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

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

瀏覽:71日期: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久久,三上悠亚国产精品一区二区三区
久久精品国产福利| 国产精品久久久久久久久免费高清| 国产视频欧美| 人人精品亚洲| 成人久久一区| 伊人精品视频| 久久国产精品99国产| 另类激情亚洲| 日韩精品久久理论片| 国产欧美激情| 精品精品久久| 亚洲网站视频| 中文字幕日韩欧美精品高清在线| 亚洲久久视频| 精品久久美女| 亚洲精品网址| 亚洲天堂av资源在线观看| 日韩美女国产精品| 国产亚洲精品美女久久| 久久av日韩| 欧美日韩免费观看视频| 视频一区二区三区在线| 欧美天堂一区| 亚洲爱爱视频| 一区二区精彩视频| 国产一区国产二区国产三区 | 欧美一区免费| 国产精品黑丝在线播放| 国产一级久久| 久久三级毛片| 蜜芽一区二区三区| 精品国产乱码久久久久久樱花| 久久精品主播| 国产色噜噜噜91在线精品| 久久精品播放| 欧美国产视频| 日韩中文字幕一区二区三区| 黄色欧美在线| 日韩精品欧美大片| 在线观看免费一区二区| 久久精品一区二区国产| 国产精品老牛| 欧美精品资源| 国产成人久久精品一区二区三区| 亚洲制服欧美另类| 久久狠狠婷婷| 国产精品色在线网站| 亚洲综合另类| 欧美日韩精品一本二本三本| 精品视频自拍| 国产精品.xx视频.xxtv| 天堂精品久久久久| 欧美特黄一区| 久久高清精品| 亚洲黄色中文字幕| 国内精品伊人| 精品国产欧美| 美女国产精品久久久| 日本aⅴ精品一区二区三区| 国产一级一区二区| 美女毛片一区二区三区四区| 国产成人免费精品| 精品日韩一区| 精品欠久久久中文字幕加勒比| 国产精品麻豆成人av电影艾秋| 日本精品另类| 国产日韩免费| 欧美a级一区二区| 国产高清视频一区二区| 国产精品久久久久久久久免费高清| 日本少妇精品亚洲第一区| 欧美日韩网址| 久久亚洲人体| 日韩中文在线电影| 欧美日韩中文一区二区| 亚洲www啪成人一区二区| 精品欧美一区二区三区在线观看| 精品国产三区在线| 免费高潮视频95在线观看网站| 午夜精品久久久久久久久久蜜桃| jizzjizz中国精品麻豆| 1000部精品久久久久久久久| 欧美天堂亚洲电影院在线观看| 免费成人在线影院| 国产香蕉精品| 午夜精品久久久久久久久久蜜桃| 亚洲午夜精品久久久久久app| 视频一区免费在线观看| 国产精品99精品一区二区三区∴| 国产aⅴ精品一区二区三区久久| 欧美中文一区二区| 午夜电影一区| 国产精品s色| 午夜久久久久| 国产精品久久久久久久久免费高清 | 捆绑调教美女网站视频一区| 日韩国产一区二区| 亚洲三级在线| 成人精品国产亚洲| 日本中文字幕不卡| 丝袜美腿一区| 久久99蜜桃| 亚洲日本在线观看视频| 欧美久久天堂| 国产精品嫩模av在线| 欧美日韩三区| 日韩在线欧美| 捆绑调教美女网站视频一区| 午夜精品影院| 青青青免费在线视频| 日韩精彩视频在线观看| 欧美精选一区二区三区| 精品久久久亚洲| 欧美专区一区二区三区| 日韩欧美一区二区三区在线视频 | 久久超碰99| 亚洲18在线| 日韩精品一二区| 日韩午夜黄色| 欧洲毛片在线视频免费观看| 色网在线免费观看| 老牛影视精品| 成人亚洲一区| 另类专区亚洲| 国产欧美日韩精品一区二区免费| 精品国产美女a久久9999| 亚洲国产不卡| 99国产精品视频免费观看一公开| 成人av动漫在线观看| 日本激情一区| 黄页网站一区| 四虎国产精品免费观看| 国产欧美丝祙| 久久伊人久久| 丁香婷婷久久| 成人福利视频| 久久九九电影| 国产午夜精品一区二区三区欧美 | 一区免费在线| 视频一区在线视频| 午夜性色一区二区三区免费视频| 热久久久久久久| 欧美日韩99| 国产成人77亚洲精品www| 成人看片网站| 国产亚洲网站| 国产精品一站二站| 韩国女主播一区二区三区| 国产欧美一区二区三区精品酒店| 免费一二一二在线视频| 免费久久99精品国产自在现线| 视频在线观看一区| 日韩高清一区二区| 国产精品99视频| 午夜日韩av| 久久精品亚洲一区二区| 国产一区久久| 国产日韩欧美一区| 激情欧美亚洲| 国产精品**亚洲精品| 激情久久久久久| 国产精品男女| 香蕉久久久久久久av网站| 久久不见久久见中文字幕免费| 亚洲韩日在线| 国产精品xxx在线观看| 国内激情久久| 久久不见久久见中文字幕免费| 好看的亚洲午夜视频在线| 欧美精品导航| 亚洲免费毛片| 国产韩日影视精品| 欧美精品97| 少妇高潮一区二区三区99| 国产91精品对白在线播放| 麻豆精品少妇| 欧美一区精品| 在线精品亚洲| 99视频在线精品国自产拍免费观看| 激情综合五月| 国产精品久久国产愉拍| 99国产精品视频免费观看一公开| 红杏一区二区三区| 国产精品成人**免费视频 | 久久久久观看| 欧美一区二区三区久久精品| 乱人伦精品视频在线观看| 久久高清免费| 不卡一区2区| 黑丝一区二区三区| 激情综合自拍| 伊人久久亚洲美女图片| 激情综合自拍| 欧美aa国产视频| 国产综合精品一区| 麻豆精品蜜桃| 在线一区免费| 一区二区亚洲视频| 日韩综合小视频| 国产欧美一区二区色老头|