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

  • 相关阅读:
    webrtc 手机端视频旋转
    gstreamer 命令行一些demo
    git一些命令记录
    libnice的问题记录
    webrtc ice 协商一些记录
    linux 挂在windows目录
    leetcode Permutation Sequence
    gstreamer 接收rtsp存储为h264
    uva 10285
    AndroidStudio VS Eclipse快捷键
  • 原文地址:https://www.cnblogs.com/freeideas/p/3203106.html
Copyright © 2011-2022 走看看