好運(yùn)物流網(wǎng)-全國(guó)領(lǐng)先的物流網(wǎng)   好運(yùn)物流網(wǎng)-登錄  好運(yùn)物流網(wǎng)-免費(fèi)注冊(cè) 進(jìn)入我的后臺(tái) 首頁 | 發(fā)布信息 | 服務(wù)項(xiàng)目 | 物流百科
物流查詢|物流公司|中國(guó)物流信息網(wǎng)-好運(yùn)物流網(wǎng)
 
你正在查看的信息:資訊首頁->資訊頻道->IT編程技術(shù)->正文

mysql存儲(chǔ)過程中如何實(shí)現(xiàn)循環(huán)?mysql存儲(chǔ)過程使用游標(biāo)和while語句

更新時(shí)間:2022/9/18 13:31    出處:互聯(lián)網(wǎng)
已經(jīng)瀏覽
10522
1、用游標(biāo)循環(huán)
BEGIN  

-- 定義變量 
   
    -- 定義done 
    DECLARE done INT;
    -- 定義 ammeter_id_bl
    DECLARE ammeter_id_bl  DOUBLE;
    -- 定義表名(tableName)游標(biāo)
    DECLARE rs_ammeter_id CURSOR FOR  
    
-- 得到游標(biāo)集合
    SELECT id FROM `res_meter` WHERE id<>1 AND id<>10 AND meter_type=1;    
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 

-- 初始化done,為0,false
    SET done = 0;
-- 打開游標(biāo)
    OPEN rs_ammeter_id; 
-- 遍歷游標(biāo)(開始循環(huán))
            REPEAT  
                    FETCH  rs_ammeter_id into ammeter_id_bl;
                    
                        IF done<>1 then
             /*
                            1、處理要插入的數(shù)據(jù)
                            */ 
             -- 給變量賦值
                        
                            SET @ammeter_id_bl=ammeter_id_bl;
              
                            SELECT t.* 
                            INTO 
                                     @min_meter_count_top
                                    ,@min_meter_count_max
                                    ,@min_meter_count_avg
                                    ,@min_meter_count_min
                                    ,@add_top
                                    ,@add_max
                                    ,@add_avg
                                    ,@add_min
                                    ,@collect_time
                                    ,@meter_status
                            FROM 
                            (
                                SELECT
                                     meter_count_top
                                    ,meter_count_max
                                    ,meter_count_avg
                                    ,meter_count_min
                                    ,ROUND(RAND()*10+4,2) add_top
                                    ,ROUND(RAND()*8+3,2) add_max
                                    ,ROUND(RAND()*7+2,2) add_avg
                                    ,ROUND(RAND()*6+1,2) add_min
                  ,DATE_ADD(collect_time, INTERVAL 30 MINUTE) collect_time
                  ,ROUND(RAND(),0) meter_status
                                FROM
                                    cap_ammeter_201810
                                WHERE
                                    collect_time = (
                                        SELECT
                                            MAX(collect_time) collect_time
                                        FROM
                                            cap_ammeter_201810
                                        WHERE
                                            ammeter_id = @ammeter_id_bl
                                        GROUP BY
                                            ammeter_id
                                    )
                                AND ammeter_id = @ammeter_id_bl
                            )t;
             
                        
              SET @meter_count_top=ROUND(@min_meter_count_top+@add_top,2)
                                 ,@meter_count_max=ROUND(@min_meter_count_max+@add_max,2)
                                 ,@meter_count_avg=ROUND(@min_meter_count_avg+@add_avg,2)
                                 ,@meter_count_min=ROUND(@min_meter_count_min+@add_min,2);

             SET @meter_count=ROUND(@meter_count_top+@meter_count_max+@meter_count_avg+@meter_count_min,2);
                            -- 查看變量的值
/*
                            SELECT
                                 @ammeter_id_bl  
                                ,@collect_time 
                                ,@meter_status 
                                ,@min_meter_count_top 
                                ,@min_meter_count_max 
                                ,@min_meter_count_avg 
                                ,@min_meter_count_min 
                                ,@add_top 
                                ,@add_max 
                                ,@add_avg 
                                ,@add_min 
                                ,@meter_count_top 
                                ,@meter_count_max 
                                ,@meter_count_avg 
                                ,@meter_count_min;
*/

                         /*
                            2、插入數(shù)據(jù)

                            */ 
              -- 1)寫sql語句 如果要用到變量,使用CONCAT()拼接
               -- 查詢出要插入的數(shù)據(jù)
             SET @queryDataSqlStr=CONCAT("SELECT 
                                 ",ROUND(@meter_count,2),"    meter_count
                                 ,'",@collect_time,"'   collect_time
                                 ,",@ammeter_id_bl,"   ammeter_id
                                 ,",@meter_status,"    meter_status 
                                 ,",ROUND(@meter_count_top,2)," meter_count_top
                                 ,",ROUND(@meter_count_max,2)," meter_count_max
                                 ,",ROUND(@meter_count_avg,2)," meter_count_avg
                                 ,",ROUND(@meter_count_min,2)," meter_count_min"
                                );
             -- 插入數(shù)據(jù)
             SET @insertSqlStr=CONCAT("INSERT INTO cap_ammeter_201810
                                      (
                                         meter_count
                                         ,collect_time
                                         ,ammeter_id
                                         ,meter_status
                                         ,meter_count_top
                                         ,meter_count_max
                                         ,meter_count_avg
                                         ,meter_count_min
                                       ) ",@queryDataSqlStr
                                     );
      
   
                         -- 4)查看sql語句
                         -- SELECT @insertSqlStr; 

                         -- 3)執(zhí)行sql語句
                            PREPARE insertSqlStr FROM @insertSqlStr;
                            EXECUTE insertSqlStr;
      


                        END IF;
    -- 直到done變?yōu)閠rue結(jié)束循環(huán)
                    UNTIL done END 
     REPEAT; 
    CLOSE rs_ammeter_id;  
END

2、while循環(huán)
BEGIN
    -- 定義變量
    DECLARE i INT DEFAULT 10;
    -- 開始循環(huán)
    WHILE i<13
    DO
        SET @day_bl=i;
        SET @createSqlStr=CONCAT("CREATE TABLE cap_ammeter_2017",@day_bl,"                       (
                                     `id` bigint(20) NOT NULL AUTO_INCREMENT,
                                     `meter_count` double(14,2) DEFAULT NULL COMMENT '電表讀數(shù)',
                                     `collect_time` datetime DEFAULT NULL COMMENT '采集時(shí)間',
                                     `ammeter_id` bigint(20) NOT NULL COMMENT '電表id,對(duì)應(yīng)res_meter的id',
                                     `meter_status` int(1) NOT NULL COMMENT '電表狀態(tài) 0:正常;1:異常',
                                     `meter_count_top` double(14,2) DEFAULT NULL COMMENT '尖值電量',
                                     `meter_count_max` double(14,2) DEFAULT NULL COMMENT '峰值電量',
                                     `meter_count_avg` double(14,2) DEFAULT NULL COMMENT '平值電量',
                                     `meter_count_min` double(14,2) DEFAULT NULL COMMENT '谷值電量',
                                      PRIMARY KEY (`id`)
                                 ) ENGINE=InnoDB AUTO_INCREMENT=19576 DEFAULT CHARSET=utf8;");
            -- 查看sql
              -- SELECT @createSqlStr;
              -- 運(yùn)行sql
        PREPARE createSqlStr FROM @createSqlStr;
              EXECUTE createSqlStr;



        SET i=i+1;


    END WHILE;
    COMMIT;
END

還可以看看其他文章,謝謝您的閱讀。
網(wǎng)站申明:系本文編輯轉(zhuǎn)載,來源于網(wǎng)絡(luò),目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),所有權(quán)歸屬原作者。如內(nèi)容、圖片有任何版權(quán)問題,請(qǐng)聯(lián)系我們刪除。
上一篇:(圖文詳解)手把手教你linux如何掛載硬盤?linux服務(wù)器上掛載新磁盤-新加的硬盤不見了 下一篇:(圖文詳解)windows 如何安裝 jdk1.8并配置環(huán)境變量
更多相關(guān)的物流文章
IT編程技術(shù)  互聯(lián)網(wǎng)  2023-10-07  瀏覽:7283次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-24  瀏覽:10439次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-17  瀏覽:10967次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-17  瀏覽:10466次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-14  瀏覽:10342次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-06  瀏覽:10720次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-05  瀏覽:10208次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-11-05  瀏覽:9941次
IT編程技術(shù)  互聯(lián)網(wǎng)  2022-10-28  瀏覽:11389次
正在被瀏覽的文章
【IT編程技術(shù)】熱點(diǎn)文章
“掃一掃”微信公眾號(hào)
好運(yùn)物流網(wǎng)公眾號(hào)二維碼
關(guān)于好運(yùn)物流網(wǎng) - 聯(lián)系好運(yùn)網(wǎng) - 物流公司查詢 - 物流知道 - 幫助中心 - 網(wǎng)站地圖
溫馨提示:防范支招 安全警示:貨運(yùn)合作要有安全意識(shí),需當(dāng)面核實(shí)對(duì)方真實(shí)身份,要簽訂合同/協(xié)議、提供身份證等(防范支招)
免責(zé)聲明:本站只起到物流信息平臺(tái)作用,內(nèi)容的準(zhǔn)確性以及物流過程中出現(xiàn)的任何風(fēng)險(xiǎn)均由發(fā)布者負(fù)責(zé),與平臺(tái)無關(guān)。
好運(yùn)物流網(wǎng)(haoyun56.com)  備案號(hào):浙ICP備10210792號(hào)-4

浙公網(wǎng)安備 33080202000006號(hào)