zoukankan      html  css  js  c++  java
  • 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 语句中引用的游标位置处于结果表最后一行之后。

  • 相关阅读:
    jeecg接口开发及权限实现原理
    Jeecg中通过Spring_AOP+注解方式实现日志的管理
    Jeecg踩坑不完全指南
    在jeecg中如何配置多对一和多对多的关系
    一致性哈希算法
    到底什么是哈希Hash?
    如何正确实现 Java 中的 HashCode
    Hash和HashCode深入理解
    关于源码
    MySQL存储过程的创建及调用
  • 原文地址:https://www.cnblogs.com/freeideas/p/3203106.html
Copyright © 2011-2022 走看看