首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

各位大侠帮帮小弟我啊

2012-03-12 
各位大侠帮帮我啊!SQL codeDELIMITER $$DROP PROCEDURE IF EXISTS `data_test`.`gps`$$CREATE DEFINER`ro

各位大侠帮帮我啊!

SQL code
DELIMITER $$DROP PROCEDURE IF EXISTS `data_test`.`gps`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `gps`()BEGIN    DECLARE i int DEFAULT 1;     DECLARE j int DEFAULT 1;     declare k datetime default '2011-01-01 00:00:00';            WHILE j<=100 DO    while i<=86400 do                 INSERT INTO T_devdata_gps_20110101(f_devid,f_longitude,f_latitude,f_speed,f_direction,f_gpstime,f_instime)                           VALUES(CONCAT('f_devid',j),concat('f_longitude',j+0.2),concat('f_latitude',j+0.3),concat('f_speed',j+1),concat('f_direction',j+4),k,k);        set k = (SELECT DATE_ADD(k,INTERVAL 1 SECOND));    set i = i+1;    end while;        set j = j+1;    set k = '2011-01-01 00:00:00';        END WHILE;    END$$

这个是我写的mysql的存储过程,我的意思是想让他进行两重循环,但是外层的循环没有执行,这个为什么啊,很急,帮帮我!

[解决办法]
SQL code
CREATE DEFINER=`root`@`localhost` PROCEDURE `gps`()BEGIN    DECLARE i int DEFAULT 1;     DECLARE j int DEFAULT 1;     declare k datetime default '2011-01-01 00:00:00';            WHILE j<=100 DO    SET I=1;  # 需要在这里给内层循环的值归位,要么I全局一次后就是86400了,下面就不再循环了。楼主看到的其实是内层循环只做了一次,外层循环是正常的。    while i<=86400 do                 INSERT INTO T_devdata_gps_20110101(f_devid,f_longitude,f_latitude,f_speed,f_direction,f_gpstime,f_instime)                           VALUES(CONCAT('f_devid',j),concat('f_longitude',j+0.2),concat('f_latitude',j+0.3),concat('f_speed',j+1),concat('f_direction',j+4),k,k);        set k = (SELECT DATE_ADD(k,INTERVAL 1 SECOND));    set i = i+1;    end while;        set j = j+1;    set k = '2011-01-01 00:00:00';        END WHILE;    END$$
[解决办法]
SQL code
DELIMITER $$DROP PROCEDURE IF EXISTS `data_test`.`gps`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `gps`()BEGIN    DECLARE i int DEFAULT 1;     DECLARE j int DEFAULT 1;     declare k datetime default '2011-01-01 00:00:00';      -- j=1这里也初始化一下,当然这个没有必要,因为在最外层,但是写出来就是告诉楼主,    -- 多层循环中,循环变量在循环之前都需要重新置为初始值。    set j=1;    WHILE j<=100 DO    -- 在每一层开始循环的时候,都需要重新置为初始值,不然i就为86400了,你只执行了j=1这个情况一遍而已。    set i=1;     while i<=86400 do                 INSERT INTO T_devdata_gps_20110101                    (f_devid,f_longitude,f_latitude,f_speed,f_direction,f_gpstime,f_instime)                   VALUES(CONCAT('f_devid',j),concat('f_longitude',j+0.2),                        concat('f_latitude',j+0.3),concat('f_speed',j+1),                        concat('f_direction',j+4),k,k);        set k = (SELECT DATE_ADD(k,INTERVAL 1 SECOND));    set i = i+1;    end while;        set j = j+1;    set k = '2011-01-01 00:00:00';        END WHILE;    END$$ 

热点排行