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存储过程之游标遍历数据表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

svygh123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值