MYSQL__MYSQL在存储过程中使用游标CURSOR

背景

在Mysql中使用存储过程。由于循环的过程中需要使用到字符,按照一些字符来循环,没有找到好的办法来循环字符。

所以考虑了游标来循环。

游标的好处是可以选择多个条件来循环,不限制字符还是或者没有顺序的东西。

实现

CREATE PROCEDURE CALSOMETHING(IN ROUND_CNT INT)
BEGIN
DECLARE I INT;DECLARE pin_value varchar(20); DECLARE pin_cur CURSOR for select pin from prnodes; /*这个表里面记录着需要循环的数据,不连续,为字符*/ DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET PIN_VALUE = NULL;/*此处用于如果游标取值为空的时候就将pin_value置为NULL,防止错误*/ SET i= 1; while i <= ROUND_CNT DO open pin_cur; FETCH pin_cur into pin_value; while (pin_value is not null) DO /*此处做是否能取到值的判断。不能则结束循环*/ insert into PageRank SELECT pin_value FROM DUAL;FETCH pin_cur into pin_value; end while; close pin_cur; set i=i+1; commit; end while; end;

备注

1.DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET PIN_VALUE = NULL;
  与
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINISHED = 1;这种语法是一致的。
  即:SQLSTATE '02000'  = NOT FOUND
过程执行中用此处的条件来进行判断是否取值结束。

2.SQLSTATE为代码执行的状态:
  02000 发生下述异常之一:
   SELECT INTO 语句或 INSERT 语句的子查询的结果为空表。
   在搜索的 UPDATE 或 DELETE 语句内标识的行数为零。
   在 FETCH 语句中引用的游标位置处于结果表最后一行之后。

原文地址:https://www.cnblogs.com/freeideas/p/3203106.html