zoukankan      html  css  js  c++  java
  • MySQL存储过程之游标

      游标相关操作:

    DECLARE <cursor-name> CURSOR FOR SELECT ... ; /* 声明游标 */
    OPEN <cursor-name> ; /* 打开游标 */
    FETCH <cursor-name> INTO variable [,variable] ; /* 提取游标内容 */
    CLOSE <cursor-name>; /* 关闭游标 */

      下面是使用游标的一个示例:

     1 CREATE PROCEDURE p25 (OUT return_val INT)
     2 BEGIN
     3     DECLARE a,b INT;
     4     DECLARE cur_1 CURSOR FOR SELECT s1 FROM t;
     5     DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
     6     OPEN cur_1;
     7     REPEAT
     8         FETCH cur_1 INTO a;
     9         UNTIL b = 1
    10     END REPEAT;
    11     CLOSE cur_1;
    12     SET return_val = a;
    13 END;// 

      1) 代码开始声明三个变量,另外,声明顺序十分重要:先声明变量,再声明条件,再后声明游标,最后才声明错误处理.否则系统提示错误信息.

      2) OPEN cur_1;打开游标,它与SELECT s1 FROM t语句是关联的,过程将执行该sql语句并返回一个结果集.

      3) FETCH cur_1 INTO a;从SELECT产生的结果集中获取一行数据.

      4) 最后MySQL的FETCH没有获取数据时,NO FOUND的异常处理被触发将变量b赋值1从而导致循环退出.然后可手动关闭游标,也可由系统关闭.

    游标的特性: 只读属性; 顺序读取; 敏感.

      5.0版的MySQL中,只能从游标中取值,不能对其进行更新.可以如下方式将游标中的数据更新到其他数据表中:

    1 FETCH cursor1 INTO variable1;   
    2 UPDATE t1 SET column1 = 'value1' WHERE CURRENT OF cursor1;

      游标也是不可以回滚的,只允许逐一读取下一行,不能在结果集中前进或后退.

      同时,游标也不允许在已打开的游标中进行操作的表上执行update操作.

  • 相关阅读:
    C#不引用IWshRuntimeLibrary获取快捷方式目标位置
    chrome插件
    禁用右键菜单
    自定义创建右键菜单项目
    Win10怀旧--win7体验
    Win10隐藏托盘图标-注册表
    一些软件下载地址
    Win10锁屏与关机相关设置-注册表
    Winform开发中的窗体重复及灵活切换问题
    Winform开发中如何将数据库字段绑定到ComboBox控件
  • 原文地址:https://www.cnblogs.com/free-coder/p/4776160.html
Copyright © 2011-2022 走看看