游标学习

MySql检索操作返回一组称为结果集的行。这组返回的行都是与sql语句相匹配的行(0行或多行)。用简单的select语句,例如,没有办法得到第一行,下一行或前10行。也不存在每次一行地处理所有的行简单办法(相对于成批的处理他们)。

目前游标只用于存储过程或函数里

一、声明游标
declare 游标名 cursor for 相应的select语句

二、打开和关闭游标
OPEN 游标名r;

CLOSE 游标名;

例1:
create procedure proce_cursor_demo()
BEGIN
    -- 声明变量
    declare o int;
    -- 声明游标
    declare cur_user CURSOR
    FOR
    select age from `user`;
    OPEN cur_user;
    FETCH cur_user INTO o;
    CLOSE cur_user;

END

FETCH用来检索当前行的age列(将自动从第一行开始)赋值到一个名为o的局部声明的变量中。

declare语句的次序:1、局部变量 2、游标 3、句柄。 不遵守此顺序将产生错误。

例2:

create procedure proce_cursor_demo2()
BEGIN
    -- 声明变量
    declare done boolean default 0;
    declare i int;
    declare a int;

    -- 声明游标
    declare cur_get_age_for_id CURSOR
    FOR
    SELECT id FROM `user`;

    -- 声明句柄
    declare continue handler  for SQLSTATE ‘02000‘ set done = 1;

    -- 创建用来保存id和age的表
    create table if not exists u_age
        (uid int,age int);

    -- open the curson
    OPEN cur_get_age_for_id;

    -- 遍历所有行
    REPEAT
        -- 得到id
        FETCH cur_get_age_for_id INTO i;
        -- 调用外部存储过程 得到age
        CALL proce_age_for_id(i,0,a);
        -- 插入到u_age表
        insert into u_age(uid,age) VALUES (i,a);

    -- 结束遍历
    UNTIL done END REPEAT;

    -- close the curson
    CLOSE cur_get_age_for_id;

END;

-- 执行函数
CALL proce_cursor_demo2();

理解:
REPEAT 是循环用的
结束条件是 UNTIL done END REPEAT; (done 是上面定义的布尔变量。为真时结束循环)

declare continue handler for SQLSTATE ‘02000‘ set done = 1;
这条名句定义了一个chontinue handler ,当SQLSTATE ‘02000‘出现时,set done = 1就执行。(SQLSTATE ‘02000‘是未找到条件,当数据遍历到末尾就出现)

时间: 2024-12-16 08:09:38

游标学习的相关文章

oracle 游标 学习

1,什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制. ②关系数据库中的操作是在完整的行集合上执行的.  由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所列条件的所有行.由该语句返回完整的行集合叫做结果集.  应用程序,尤其是互动和在线应用程序,把完整的结果集作为一个单元处理并不总是有效的. 这些应用程序需要一种机制来一次处理一行或连续的几行.而游标是对提供这一机制的结果集的扩展. 游标是通过游标库来实现的.游标库是常常作为数据库系统或数据访问 API

SqlServer和MySQL游标学习

一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1声明游标 最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>: 其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询 例子: [已表2 AddSalary为例子] Declare mycursor cursor for select *

游标(学习笔记)

--游标分2种类型: --静态游标:结果集已经存在(静态定义)的游标,分为隐式和显示游标 --隐式游标:所有DML语句为隐式游标,通过隐式游标属性可以获取SQL语句信息 --显示游标:用户显示声明的游标,即指定结果集,当查询返回结果超过一定行时,就需要一个显示游标 --REF 游标:动态关联结果集的临时对象 -强类型:带return类型 -弱类型: 不带return类型 --隐式游标 --在PL/SQL中编写的每条SQL 语句实际上都是隐匿游标.通过在DML操作后使用SQL%ROWCOUNT属性

MYSQL 游标学习及使用实例

who?(游标是什么?)游标(cursor)官方定义:是系统为用户开通的一个数据缓冲区,存放sql执行结果.每个游标区都有一个名字,用户可以通过sql语句逐一从游标中获取记录,并赋值给变量,交由主语言进一步处理;个人理解:感觉游标和指针相似,指定结果集后一行行执行; why?(为什么要学习游标)游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作:它还提供对基于游标位置而对表中数据进行删除或更新的能力:而且,正是游标把作为面向集

游标学习案例

1 declare @GoodsID varchar(255); 2 declare @GoodsName varchar(255); 3 set @GoodsID ='G050003' ; 4 set @GoodsName='美的空调'; 5 select @GoodsID 商品编号,@GoodsName 商品名称 6 7 8 select * from t_ICItem where FNumber like '04.01.%' and len(FNUmber)=9 order by FNam

SQLServer 学习相关资料整理【转】

存储过程: SQL Server 存储过程 博客园上的一篇文章,讲解的非常详细,有测试代码,很实用. sqlserver存储过程中执行动态sql语句  The Curse and Blessings of Dynamic SQL 存储过程及游标学习笔记 博客园,很基础,很细致,不错的文章. T_SQL语句: sqlserver跨服务器查询的实现  详细讲述了如何实现跨服务器的增删查改. sqlserver事务处理  包含了如何在sql语句中写以及在C#中写事务,不 sqlserver字段类型详解

java实现调用ORACLE中的游标和包

今天把oracle中的包和游标学习了下,不废话,网上的的有些代码是错误的,抄来抄去,就自己实践了下,做个记录.直接上图,上代码 通过plsql创建自己的的包,包分为包头和包体. 1.包头如下: 1 CREATE OR REPLACE PACKAGE JAVALINKTEST 2 IS 3 TYPE CURSOR_TYPE IS REF CURSOR; --定义游标 4 PROCEDURE TEST_CURSOR(INPUT STRING, CURSOR_BACK OUT CURSOR_TYPE)

mysql数据库使用

---恢复内容开始--- C#操作Mysql数据库的存储过程,网址 DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式. 注释:只有值的日期部分参与计算. 实例 例子 1 使用如下 SELECT 语句: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate 结果:1 MySQL是不支持SELECT - INTO语法的,使用INS

算法学习 - 链表的游标实现~ C++

链表的游标实现,就是用另外一种方法来访问链表,模拟游标. 在我学习的理解中,就是创建一个节点数组,模拟内存的排列,然后从其中来申请内存和释放内存.但是实际的内存没有被释放~ 下面直接贴代码了: // // main.cpp // CursorList // // Created by Alps on 14-7-27. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define CursorSp