MySQL存储过程中游标使用

在使用游标的时候,使用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存储过程之游标遍历数据表

发布了64 篇原创文章 · 获赞 34 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/svygh123/article/details/103244526