• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

各位大侠帮帮小弟我啊

mysql 搞代码 7年前 (2018-05-31) 135次浏览 已收录 0个评论

各位大侠帮帮我啊!

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

欢迎大家阅读《各位大侠帮帮小弟我啊》,跪求各位点评,by 搞代码

这个是我写的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$$


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:各位大侠帮帮小弟我啊
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址