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