MySQL游标多次获取唯一的第一条记录

MySQL游标多次获取唯一的第一条记录,mysql,stored-procedures,cursor,Mysql,Stored Procedures,Cursor,我的存储过程如下所示: CREATE PROCEDURE `kiosk_pro`.`setTimeAdjustForNext`(tokenno int,cdate date) /*LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | C

我的存储过程如下所示:

CREATE PROCEDURE `kiosk_pro`.`setTimeAdjustForNext`(tokenno int,cdate date)
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN

        declare lo_SNO int;

        declare lo_TokenNo int;


        DECLARE done INT DEFAULT FALSE ;

       Declare mycur Cursor for( select  SNO  from kiosk_token_generation  where TokenDate=cdate and  TokenNo >= tokenno order by TokenNo );
              DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
       open mycur;

        time_loop :LOOP 

              FETCH mycur into lo_SNO;

             if done then 
                 close mycur;  
                  leave time_loop;
             end if;

            select lo_SNO ;

           end loop time_loop;


    END$$
实际上,我的表在SNO列中有3条记录1,2,3,在SNO列中有1,2,3 TokenNo列,我通过传递
date来调用上面的存储过程
='2014-02-22'
tokenno=1
,但它三次返回1值

我哪里出错了?

您的SP工作正常

可能您在另一个数据库中有另一个SP

create table kiosk_token_generation (SNO  int, TokenNo int, TokenDate datetime);
INSERT INTO kiosk_token_generation (SNO, TokenNo, TokenDate) VALUES (1,1,'2014-02-22');
INSERT INTO kiosk_token_generation (SNO, TokenNo, TokenDate) VALUES (2,2,'2014-02-22');
INSERT INTO kiosk_token_generation (SNO, TokenNo, TokenDate) VALUES (3,3,'2014-02-22');



DELIMITER $$
CREATE PROCEDURE setTimeAdjustForNext(tokenno int,cdate date)
    BEGIN
       declare lo_SNO int;
       declare lo_TokenNo int;
       DECLARE done INT DEFAULT FALSE;
       Declare mycur Cursor for( select  SNO  from kiosk_token_generation  where TokenDate=cdate and  TokenNo >= tokenno order by TokenNo );
       DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
       open mycur;
       time_loop :LOOP
              FETCH mycur into lo_SNO;
             if done then
                 close mycur;
                 leave time_loop;
             end if;
            select lo_SNO ;
           end loop time_loop;
    END$$
DELIMITER ;






select  SNO  from kiosk_token_generation  where TokenDate='2014-02-22' and  TokenNo >= 1 order by TokenNo

CALL setTimeAdjustForNext (1, '2014-02-22');

如果我们使用TokenNo,那么它就不能正常工作,而不是游标中的SNO