存储过程游标错误No data - zero rows fetched, selected, or processed

wanlong1215 2012-09-26 08:04:49
我写了个存储过程,想验证游标使用方法的,代码如下
DELIMITER //
CREATE PROCEDURE jinsl()
BEGIN
DECLARE P VARCHAR(100);
-- 判断游标到达最后的情况
DECLARE _STOP INT DEFAULT 0;
-- 声明游标
DECLARE CUR CURSOR FOR SELECT P FROM JINSL_NET_TYPE;
-- 设置游标的终止条件
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _STOP=1;
-- 打开游标
OPEN CUR;
FETCH CUR INTO P;
WHILE _STOP<>1 DO
INSERT INTO JINSL_RESULT(net_type,product_type) VALUES(p, 0);
FETCH CUR INTO P;
END WHILE;
CLOSE CUR;
END
//
DELIMITER ;

执行后报如题的错误,并且插入到表的记录的空的,条数是对的,这个小弟没明白是怎么回事,感觉应该是游标用的有问题,希望大神赐教,谢谢!
...全文
1095 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2012-09-29
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,建立表及插入记录的SQL语句,用来运行你的SP,看看问题出在什么地方
wwwwb 2012-09-29
  • 打赏
  • 举报
回复
DELIMITER //
CREATE PROCEDURE jinsl()
BEGIN
DECLARE P1 VARCHAR(100);
-- 判断游标到达最后的情况
DECLARE _STOP INT DEFAULT 0;
-- 声明游标
DECLARE CUR CURSOR FOR SELECT P FROM JINSL_NET_TYPE;
-- 设置游标的终止条件
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _STOP=1;
-- 打开游标
OPEN CUR;
FETCH CUR INTO P1;
WHILE _STOP<>1 DO
-- INSERT INTO JINSL_RESULT(net_type,product_type) VALUES(p1, 0);
SELECT P1;
FETCH CUR INTO P1;
END WHILE;
CLOSE CUR;
END
//
DELIMITER ;

mysql> SELECT * FROM JINSL_NET_TYPE;
+------+------+
| P | ID |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
| 5 | NULL |
+------+------+
5 rows in set (0.00 sec)

mysql> CALL jinsl
-> ;
+------+
| P1 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

+------+
| P1 |
+------+
| 2 |
+------+
1 row in set (0.00 sec)

+------+
| P1 |
+------+
| 3 |
+------+
1 row in set (0.00 sec)

+------+
| P1 |
+------+
| 4 |
+------+
1 row in set (0.01 sec)

+------+
| P1 |
+------+
| 5 |
+------+
1 row in set (0.01 sec)

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql>
wwwwb 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 1 楼 的回复:
字段名、变量名不要重名,SELECT P FROM JINSL_NET_TYPE是否有记录

DELIMITER //
CREATE PROCEDURE jinsl()
BEGIN
DECLARE P1 VARCHAR(100);
-- 判断游标到达最后的情况
DECLARE _STOP INT DEFAULT 0;
-- 声明游标
DECLARE ……
[/Quote]
set @ASQL=CONCAT('SELECT * FROM ',t_name);
PREPARE STML FROM @ASQL;
EXECUTE STML;
wanlong1215 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
贴建表及插入记录的SQL
明日来测试一下
[/Quote]

大神,您这句话我没太看明白什么意思,是描述哪个问题的我都没看清楚
WWWWA 2012-09-28
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL
明日来测试一下
wanlong1215 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
字段名、变量名不要重名,SELECT P FROM JINSL_NET_TYPE是否有记录

DELIMITER //
CREATE PROCEDURE jinsl()
BEGIN
DECLARE P1 VARCHAR(100);
-- 判断游标到达最后的情况
DECLARE _STOP INT DEFAULT 0;
-- 声明游标
DECLARE CUR ……
[/Quote]

另外问大神个问题,如下
DECLARE t_name VARCHAR(50);
SET t_name='t10';
SELECT * FROM t_name; -- 错误的,实际想查询t10表中的数据
我想在一个未知表名的表中查记录怎么写存储过程啊?
wanlong1215 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
字段名、变量名不要重名,SELECT P FROM JINSL_NET_TYPE是否有记录

DELIMITER //
CREATE PROCEDURE jinsl()
BEGIN
DECLARE P1 VARCHAR(100);
-- 判断游标到达最后的情况
DECLARE _STOP INT DEFAULT 0;
-- 声明游标
DECLARE CUR ……
[/Quote]


里面是有数据的,照着您的这个改了之后CALL时仍然报错,错误如下:
(0 row(s) affected, 1 warning(s))
Execution Time : 00:00:00:031
Transfer Time : 00:00:00:000
Total Time : 00:00:00:031
Error Code : 1329
No data - zero rows fetched, selected, or processed
wanlong1215 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SELECT P FROM JINSL_NET_TYPE;
这个表中有记录吗?
[/Quote]

这个表是有记录的 而且确定有
ACMAIN_CHM 2012-09-27
  • 打赏
  • 举报
回复
SELECT P FROM JINSL_NET_TYPE;
这个表中有记录吗?
wwwwb 2012-09-27
  • 打赏
  • 举报
回复
字段名、变量名不要重名,SELECT P FROM JINSL_NET_TYPE是否有记录

DELIMITER //
CREATE PROCEDURE jinsl()
BEGIN
DECLARE P1 VARCHAR(100);
-- 判断游标到达最后的情况
DECLARE _STOP INT DEFAULT 0;
-- 声明游标
DECLARE CUR CURSOR FOR SELECT P FROM JINSL_NET_TYPE;
-- 设置游标的终止条件
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _STOP=1;
-- 打开游标
OPEN CUR;
FETCH CUR INTO P1;
WHILE _STOP<>1 DO
INSERT INTO JINSL_RESULT(net_type,product_type) VALUES(p1, 0);
FETCH CUR INTO P1;
END WHILE;
CLOSE CUR;
END
//
DELIMITER ;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧