BEGINDECLARE _id, flag INT;
DECLARE foo VARCHAR(200) DEFAULT '|';DECLARE cur_1 CURSOR FOR SELECT cateId FROM cate WHERE cateId < 2 ORDER BY cateId;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;OPEN cur_1;
REPEAT
FETCH cur_1 INTO _id;
SET foo = CONCAT(foo, '|', _id);
UNTIL flag
END REPEAT;
CLOSE cur_1;SELECT foo;END运行结果:
||1|1问题:
为什么输出会有2个1,理论上来说应该是||1这样的结果,是不是我对循环的理解错了?
DECLARE foo VARCHAR(200) DEFAULT '|';DECLARE cur_1 CURSOR FOR SELECT cateId FROM cate WHERE cateId < 2 ORDER BY cateId;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;OPEN cur_1;
REPEAT
FETCH cur_1 INTO _id;
SET foo = CONCAT(foo, '|', _id);
UNTIL flag
END REPEAT;
CLOSE cur_1;SELECT foo;END运行结果:
||1|1问题:
为什么输出会有2个1,理论上来说应该是||1这样的结果,是不是我对循环的理解错了?
解决方案 »
- mysql5.0 #1064错误
- 两表关联问题~~请教高手。
- 删除一张表中重复记录的SQL语句怎么写?(简单得分,解决即给分)
- Mysql支持外键吗?
- 请教:我在windows中用什么工具来操作msql?
- 如何在命令行中将连接时的字符集设置成utf-8,即实现jdbc:mysql://localhost/<database>?useUnicode=true&characterEncoding=utf-8
- 有8000左右各字符长度。应该选择什么类型的字段?
- 找人安装调试apache和mysql
- mysql数据库如何本地网络同步?有什么成熟的方案?
- Mysql自定义函数执行时间与不封装时执行时间差别很大,求解
- 有没有高手知道MySQL的AES密码是如何生成的?
- 一个简单问题
mysql> CREATE PROCEDURE dorepeat(p1 INT)
-> BEGIN
-> SET @x = 0;
-> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> CALL dorepeat(1000)//
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x//
+------+
| @x |
+------+
| 1001 |
+------+
1 row in set (0.00 sec)
...
SET v1 = v1 - 1;
END WHILE;
替换REPEAT试试
用SELECT @ff=COUNT(*)FROM cate WHERE cateId < 2 ORDER BY cateId
取得记录数,用WHILE WEND循环试试。
每次还得重新SELECT一次
现在调试起来真的好麻烦……