mysql while循环嵌套
来源:互联网 发布:excel的数据库功能 编辑:程序博客网 时间:2024/05/01 21:54
原始出处 :http://qdjyyl.blog.51cto.com/1222376/595433
今天在写存储过程,想要测试一些东西,其中有一个表,需要插入100万用户,每个用户有40行记录,这里面有两个循环,想到了嵌套。一般大家都知道for循环的嵌套,但是mysql存储过程中只有三种循环while、repeat、loop。因为一直使用while,所以就打算用while来做这件事情。结果发现,总是不能够循环,直插入一个用户的40行记录,非常无语。代码如下:
DELIMITER $$
USE `qqfs_db_items`$$
DROP PROCEDURE IF EXISTS `qqsf_proc_InsertItemTest`$$
CREATE PROCEDURE `qqsf_proc_InsertItemTest`(
i_PlayerCount INT) COMMENT '插入道具表测试'
BEGIN
DECLARE a INT DEFAULT 1;
DECLARE b TINYINT DEFAULT 1;
WHILE (a <= i_PlayerCount) DO
SET a = a + 1;
WHILE (b <=40) DO
INSERT INTO qqfs_tbl_items (AuthID,Slot,CID,GTID,Nums,Endtime,Flags,UseInfo)
VALUES
(a,b,0,0,1,NOW(),0,1);
SET b = b + 1;
END WHILE;
END WHILE;
END$$
DELIMITER ;
后来用select a,select b,自定义查询断点发现循环是继续的。网上查了下,貌似没人说清楚。后来仔细一看,原来自己受了以前程序中for循环的束缚,以为b的值总是会在第二次循环时被重置,其实b的值在一次循环之后,就已经变为40了,所以,有两种解决方法,一个是想程序中for循环一样,将b的初始化放在a的循环中;另一种就是在a循环中,将b的值再次初始化为1.
问题得到解决,新代码如下:
DELIMITER $$
USE `qqfs_db_items`$$
DROP PROCEDURE IF EXISTS `qqsf_proc_InsertItemTest`$$
CREATE DEFINER=`root`@`%` PROCEDURE `qqsf_proc_InsertItemTest`(
i_PlayerCount INT) COMMENT '插入道具表测试'
BEGIN
DECLARE a INT DEFAULT 1;
DECLARE b TINYINT DEFAULT 1;
WHILE (a <= i_PlayerCount) DO
-- repeat
SET a = a + 1;
-- select a;
WHILE (b <=40) DO
INSERT INTO qqfs_tbl_items (AuthID,Slot,CID,GTID,Nums,Endtime,Flags,UseInfo)
VALUES
(a,b,0,0,1,NOW(),0,1);
SET b = b + 1;
-- select b;
END WHILE;
SET b = 1;
-- select a;
-- until a >= i_PlayerCount
-- end repeat;
END WHILE;
END$$
DELIMITER ;
包含了repeat的实现和我在排错中给a和b打的select断点。希望对大家有用。
- mysql while循环嵌套
- SQL WHILE 循环 嵌套
- while循环嵌套练习
- while循环嵌套练习
- MYSQL存储过程,while循环和游标的嵌套使用
- MYSQL 循环命令while
- MySQL While循环语句
- while循环中嵌套while循环,break退出分析
- mysql 存储过程实例 (日期以小时递增 while loop循环嵌套 随机数生成)
- MySQL用while实现for循环嵌套(插入学生成绩信息功能)
- mysql游标嵌套循环
- mysql游标嵌套循环
- for 循环嵌套 while 的神奇问题
- 蛇形填数[While嵌套循环]
- C语言之while循环语句和do while循环语句、for循环语句、循环嵌套
- MySQL While 循环小例子
- mysql 循环while、loop、REPEAT
- Hashtable的while循环,HashMap、List的嵌套循环。
- Flex编译器参数一览
- SQL SERVER 2008 sa登录 18456 错误解决方案
- 开门
- WinMain 中的 lpCmdLine
- 从单片机初学者迈向单片机工程师
- mysql while循环嵌套
- js验证只能输入汉字 只能输入数字 只能输入英文和数字 控制输入框只能输入
- struts中验证码的实现
- JS轻松实现单击文本框弹出选择日期
- 用Java读取INI文件(带section的)
- POJ-2495(棋盘覆盖问题)
- sql 外键约束
- silverlight 和XNA要死了,Microsoft就是另外一个IBM
- EL表达式函数-获取字符串长度、截取字符串