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的存储过程,我的意思是想让他进行两重循环,但是外层的循环没有执行,这个为什么啊,很急,帮帮我!

解决方案 »

  1.   

    jklzou3 (jklzou3)
      '截至2011-02-07 23:13:59  用户结帖率0.00%  当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  2.   


    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$$
      

  3.   

    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$$
      

  4.   

    看到这里,我只能说,mysql的(存储功过程语言)不但功能弱,而且语法丑陋 之极!
    其语法解释引擎,至少应向通用语言的语法学习吧,最好再加上点面向对象。
    路还很长~~