免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3529 | 回复: 3
打印 上一主题 下一主题

游标嵌套异常1329无法捕获 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-27 22:33 |只看该作者 |倒序浏览
————————————————————————————————————————————————
MySQL-5.5.15
————————————————————————————————————————————————

CREATE TABLE tb_user (
   id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   u_name CHAR(30) DEFAULT NULL,
   PRIMARY KEY (id),
   UNIQUE KEY u_name (u_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE tb_user_message (
   message_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   user_id INT(10) UNSIGNED NOT NULL,
   message_title CHAR(30) DEFAULT NULL,
   PRIMARY KEY (message_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE temp_message_100 (
   message_id INT(10) UNSIGNED NOT NULL,
   message_title CHAR(30) DEFAULT NULL,
   PRIMARY KEY (message_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE temp_message_200 (
   message_id INT(10) UNSIGNED NOT NULL,
   message_title CHAR(30) DEFAULT NULL,
   PRIMARY KEY (message_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE temp_message_300 (
   message_id INT(10) UNSIGNED NOT NULL,
   message_title CHAR(30) DEFAULT NULL,
   PRIMARY KEY (message_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

————————————————————————————————————————————————

DELIMITER $$
CREATE PROCEDURE sp_nested_cursor()
BEGIN
    DECLARE uid, m_id INT(10);
    DECLARE m_title VARCHAR(100);
    DECLARE done_outer TINYINT DEFAULT 0;

    DECLARE cur_user_id CURSOR FOR SELECT id FROM tb_user;
/* DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done_outer = 1; */
    DECLARE EXIT HANDLER FOR NOT FOUND, SQLSTATE '02000' SET done_outer = 1;

    OPEN cur_user_id;
    loop_user_id:LOOP
  
       FETCH cur_user_id INTO uid;
       IF done_outer THEN
          LEAVE loop_user_id;
       END IF;

       BEGIN
           DECLARE done_inner TINYINT DEFAULT 0;
           DECLARE cur_user_message CURSOR FOR SELECT message_id, message_title FROM tb_user_message WHERE user_id = uid;
           DECLARE EXIT HANDLER FOR SQLSTATE '02000' SET done_inner = 1;

           OPEN cur_user_message;
           loop_user_message:LOOP

                FETCH cur_user_message INTO m_id, m_title;
                IF done_inner THEN
                   LEAVE loop_user_message;
                END IF;

                IF m_id < 100 THEN
                   INSERT INTO temp_message_100 VALUES (m_id, m_title);
                ELSEIF m_id < 200 THEN
                   INSERT INTO temp_message_200 VALUES (m_id, m_title);
                ELSEIF m_id < 20000 THEN
                   INSERT INTO temp_message_300 VALUES (m_id, m_title);
                END IF;

           END LOOP;
           CLOSE cur_user_message;
       END;

    END LOOP;
    CLOSE cur_user_id;
   
END; $$
DELIMITER ;

————————————————————————————————————————————————
mysql> CALL sp_nested_cursor();

Error 1329 No data - zero rows fetched, selected, or processed

论坛徽章:
0
2 [报告]
发表于 2011-10-28 10:52 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2011-10-28 11:34 |只看该作者
回复 2# kerlion


    是说MySQL文档手册上的游标代码吗?
   那个不是嵌套循环啊,只是两个游标的循环;
   对比看一下我这个就知道了。

论坛徽章:
0
4 [报告]
发表于 2011-10-28 17:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP