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 语句中引用的游标位置处于结果表最后一行之后。

  • 相关阅读:
    串的模式匹配
    Linux_ch02
    Linux操作简介
    Stack&Queue
    单链表
    工作中用到的oracle字符串分割整理
    maven_spring mvc_mina_dome(实体,文件,批传)(spring mina 初学dome)
    求整数和与均值
    简单计算器
    苹果和虫子2
  • 原文地址:https://www.cnblogs.com/freeideas/p/3203106.html
Copyright © 2011-2022 走看看