在使用游标的时候,使用LOOP没有响应,后找到使用REPEAT实现,以下是代码:
建表语句
DROP table IF EXISTS test_table;
create table test_table(id varchar(40));
insert into test_table(id) values('a001');
select * from test_table;
错误代码
DROP PROCEDURE IF EXISTS new_procedure;
DELIMITER //
CREATE PROCEDURE new_procedure()
BEGIN
DECLARE tb_id varCHAR(31);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR select id from test_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
myLoop: LOOP
FETCH cur into tb_id;
IF done THEN
LEAVE myLoop;
END IF;
select tb_id;
END LOOP myLoop;
CLOSE cur;
END //
DELIMITER ;
call new_procedure();调用时,只输出
DROP PROCEDURE IF EXISTS new_procedure
> OK
> 时间: 0.003s
正确代码
DROP PROCEDURE IF EXISTS new_procedure;
DELIMITER //
CREATE PROCEDURE new_procedure()
BEGIN
DECLARE tb_id varCHAR(31);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR select id from test_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
FETCH NEXT FROM cur INTO tb_id;
REPEAT
IF NOT Done THEN
select tb_id;
END IF;
FETCH NEXT FROM cur INTO tb_id;
UNTIL Done END REPEAT;
CLOSE cur;
END //
DELIMITER ;
call new_procedure();调用时输出
完.
参考文章: mysql存储过程之游标遍历数据表