Unknown system variable 'FETCH_STATUS'DELIMITER $$DROP PROCEDURE IF EXISTS `zz`.`testloop`$$CREATE PROCEDURE `testloop`()
BEGIN DECLARE uname VARCHAR(200);
DECLARE id  int;
DECLARE cur_rows cursor for (select id,name from test1 group by name having count(*) >1);
/*游标*/open cur_rows;
fetch cur_rows into id,uname;
WHILE @@FETCH_STATUS = 0
begin 
select uname;fetch cur_rows into id,uname;end; CLOSE cur_rows; 
DEALLOCATE cur_rows;
END$$DELIMITER ;

解决方案 »

  1.   

    BEGIN
      DECLARE done INT DEFAULT 0;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    WHILE done=0 do
    ....
      

  2.   

    MYSQL不是MS SQL,有些不同。请参考一下手册中的例子。CREATE PROCEDURE curdemo()
    BEGIN
      DECLARE done INT DEFAULT 0;
      DECLARE a CHAR(16);
      DECLARE b,c INT;
      DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
      DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  OPEN cur1;
      OPEN cur2;  REPEAT
        FETCH cur1 INTO a, b;
        FETCH cur2 INTO c;
        IF NOT done THEN
           IF b < c THEN
              INSERT INTO test.t3 VALUES (a,b);
           ELSE
              INSERT INTO test.t3 VALUES (a,c);
           END IF;
        END IF;
      UNTIL done END REPEAT;  CLOSE cur1;
      CLOSE cur2;
    END
      

  3.   

    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  4.   

    这下又出这个错误了
    Variable or condition declaration after cursor or handler declaration
    DELIMITER $$DROP PROCEDURE IF EXISTS `zz`.`testloop`$$CREATE PROCEDURE `testloop`()
    BEGIN /*初始化变量 账户名*/
    DECLARE uname VARCHAR(200);
    /*初始化 id*/
    DECLARE id  int;
    /*游标保存*/
    DECLARE cur_rows cursor for (select id,name from test1 group by name having count(*) >1);
    /*判断值*/
    DECLARE done INT DEFAULT 0; 
    open cur_rows;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
    fetch cur_rows into id,uname;
    WHILE  done = 0
    begin 
    select uname;fetch cur_rows into id,uname;end; CLOSE cur_rows; 
    DEALLOCATE cur_rows;
    END$$
    DELIMITER ;
      

  5.   

    Variable or condition declaration after cursor or handler declaration翻译一下你就明白了。变量和条件声明在 cursor or handler 之后了。
      

  6.   

    CREATE PROCEDURE `testloop`()
    BEGIN DECLARE uname VARCHAR(200);
    DECLARE id  int;
    DECLARE done INT DEFAULT 0; 
    DECLARE cur_rows cursor for (select id,name from test1 group by name having count(*) >1);
      

  7.   

    调整一下这两句的位置。CREATE PROCEDURE `testloop`()
    BEGIN DECLARE uname VARCHAR(200);
    DECLARE id  int;
    DECLARE done INT DEFAULT 0; 
    DECLARE cur_rows cursor for (select id,name from test1 group by name having count(*) >1);
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    open cur_rows;
      

  8.   


    DELIMITER $$DROP PROCEDURE IF EXISTS `zz`.`testloop`$$CREATE PROCEDURE `testloop`()
    BEGIN DECLARE uname VARCHAR(200);
    DECLARE id  int;
    declare done int default 0;
    DECLARE cur_rows cursor for (select id,name from test1 group by name having count(*) >1);
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    /*游标*/open cur_rows;
    WHILE done=0 do 
    fetch cur_rows into id,uname;
    select uname;
    end while;
    CLOSE cur_rows; 
    END$$
      

  9.   


    多谢 各位哈,这个能直接使的... (mysql 存储过程的语法写着很不舒服 - - )
    多些各位帮忙 :)
    感激不尽..