• MySQL游标(cursor) 定义及使用


    概念

    游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。 
    使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。

    用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。

    游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。

    优点

    1、允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。

    2、提供对基于游标位置的表中的行进行删除和更新的能力。

    3、游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。

    原理

    游标就是把数据按照指定要求提取出相应的数据集,然后逐条进行数据处理。

    使用游标的顺序

     声名游标、打开游标、读取数据、关闭游标、删除游标。

    使用游标(cursor)

    1.声明游标

    DECLARE cursor_name CURSOR FOR select_statement
    这个语句声明一个游标。也可以在子程序中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。声明游标后也是单条操作的,但是不能用SELECT语句不能有INTO子句。

    2. 游标OPEN语句

    OPEN cursor_name       这个语句打开先前声明的游标。

    3. 游标FETCH语句

    FETCH cursor_name INTO var_name [, var_name] ...这个语句用指定的打开游标读取下一行(如果有下一行的话),并且前进游标指针。

    4. 游标CLOSE语句

    CLOSE cursor_name  这个语句关闭先前打开的游标。

    特性

    1,只读的,不能更新的。
    2,不滚动的
    3,不敏感的,不敏感意为服务器可以活不可以复制它的结果表

    游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明

    delimiter $$
    create procedure pa(out sum bigint)
      begin
    
        declare iii int;
    
        declare done int default 0;
        # 1、游标的定义
        declare c_person cursor for select id from randtable;
        # 捕获系统抛出的 not found 错误,如果捕获到,将 done 设置为 1  相当于try异常
        declare continue handler for not found set done=1;
        set sum=0;
        # 2、打开游标
        open c_person;
    
        www:loop
          # 3、使用游标
          fetch c_person into iii;
          # 如果发生异常
            if done = 1 then
    
              leave www;
            end if ;
    
          set sum = sum +iii ;
        end loop ;
        # 4、关闭游标
        close c_person;
        end $$
        delimiter  ;
    
    -- 调用
    set @sum = 0;
    call pa(@sum);
    select @sum;
    View Code
  • 相关阅读:
    创建对象_原型(Prototype)模式_深拷贝
    创建对象_工厂方法(Factory Method)模式 与 静态工厂方法
    创建对象——单例(Singleton)模式
    模板方法模式
    移除HTML5 input在type="number"时的上下小箭头
    颜色名列表
    什么是盒模型?
    JQuery中$.ajax()方法参数详解
    zsh下docker命令tab补全方法
    ubuntu14.04 搭建gitlab服务
  • 原文地址:https://www.cnblogs.com/weibanggang/p/9678108.html
Copyright © 2020-2023  润新知