精华内容
下载资源
问答
  • --数据游标数据库中起到的就是一个书签的作用,它让一个抽象的成员实例化为一个准确的对象。游标虽好,但是可不能多次使用,运行效率会降低! USE [数据库名] GO Create procedure [dbo].[proc_gitcontent]/...
     
      
    --数据游标在数据库中起到的就是一个书签的作用,它让一个抽象的成员实例化为一个准确的对象。游标虽好,但是可不能多次使用,运行效率会降低!  

    USE
    [数据库名] GO Create procedure [dbo].[proc_gitcontent]//存储过程名称 as declare --声明变量(用于插入数据) @content varchar(max), @sendsuccesscount int, @sendfailecount int, @submitfailcount int, @unknown int, @status int, @userid int, @addtime datetime --定义一个游标cursor(相当于一个书签) declare content_cursor cursor for select Content,userid from tbl_sms_log group by Content,userid declare @sum int set @sum=0 create table #table ( [ID] int identity(1,1) primary key NOT NULL, [Userid] int null,--用户id [content] [varchar](max) null,--内容 [sendsuccess] [int] null,--发送成功 10 [sendfail] [int] null,--发送失败 20 [submitfail] [int] null,--提交失败 2 [unknown] [int] null,--未知数 0 [addtime] [datetime] null--添加时间 ) --打开游标 open content_cursor --读取游标(遍历赋值)(解决重复插入的bug) fetch next from content_cursor into @content,@userid while @@FETCH_STATUS=0 --返回游标执行状态(0表示返回结果成功) begin --发送成功赋值 set @sendsuccesscount=(select COUNT([status]) from tbl_sms_log where status='10' and Content=@content and UserID=@userid group by Content,userid,[status]) --发送失败赋值 set @sendfailecount=(select COUNT([status]) from tbl_sms_log where status='20' and Content=@content and UserID=@userid group by Content,userid,[status]) --提交失败赋值 set @submitfailcount=(select COUNT([status]) from tbl_sms_log where status='2' and Content=@content and UserID=@userid group by Content,userid,[status]) --未知赋值 set @unknown=(select COUNT([status]) from tbl_sms_log where status='0' and Content=@content and UserID=@userid group by Content,userid,[status])
    set @addtime =GETDATE() --set @sum+=1 insert into #table(Userid,content,sendsuccess,sendfail,submitfail,unknown,addtime) values (@userid,@content,@sendsuccesscount,@sendfailecount,@submitfailcount,@unknown,@addtime) fetch next from content_cursor into @content,@userid--游标再次赋值,解决数据重复插入的bug end --关闭游标(decalre content_cursor cursor for) close content_cursor --释放资源 deallocate content_cursor begin select * from #table --关闭游标 end

     

    转载于:https://www.cnblogs.com/Can-daydayup/p/8660996.html

    展开全文
  • 关于数据库游标

    2020-05-26 20:15:13
    实例: --修改消费等级这个字段 --当消费金额》1000,等级大客户 --500-1000包含500,不包括1000 等级中等客户 --小于500 小客户 --怎么去实现 --声明游标 declare cur_cust_level Cursor for select id,...

    定义: 游标是SQL 的一种数据访问机制。可以将游标简单的看成是查询的结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览需要的数据。

    实例:

    在这里插入图片描述

    --修改消费等级这个字段
    --当消费金额》1000,等级大客户
    --500-1000包含500,不包括1000 等级中等客户
    --小于500 小客户
    --怎么去实现
    --声明游标
    declare cur_cust_level Cursor 
    for select id,CousumeAmount from  Customers
    --打开游标
    open cur_cust_level
    --浏览数据,取数据ID,ConsumeAccount
    --取数据
    declare @id int
    declare @Cacount int
    fetch next from cur_cust_level into @id,@Cacount
    --循环往下
    while(@@FETCH_STATUS=0)
    begin
    --print @id+@Cacount
    --修改消费等级
    if(@Cacount<500)
      update Customers set CousumeLeve='低消费' where id=@id
      else if(@Cacount<1000)
      update Customers set CousumeLeve='中消费' where id=@id
      else
      update Customers set CousumeLeve='高消费' where id=@id
      fetch next from cur_cust_level into @id,@Cacount
    end
    --关闭游标
    close cur_cust_level
    --释放游标
    deallocate cur_cust_level
    select * from Customers
    

    效果:

    在这里插入图片描述

    展开全文
  • 什么是游标游标是SQL 的一种数据访问机制...实例 –声明游标 declare cur_cust_level Cursorfor select ID,ConsumerAmount from Customers –打开游标 open cur_cust_level –浏览数据,取数据ID,CustomerAccount.
    1. 什么是游标?
      游标是SQL 的一种数据访问机制。可以将游标简单的看成是查询的结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览需要的数据。
    2. 游标的作用是什么?
      可以保存查询结果,方便查询,可以创建一个游标可以多次使用。提高查询效率。
    3. 实例
      –声明游标
      declare cur_cust_level Cursorfor select ID,ConsumerAmount from Customers
      –打开游标
      open cur_cust_level
      –浏览数据,取数据ID,CustomerAccount
      –取数据–拿之前先定义两个变量
      declare @id int
      declare @Cacount int
      fetch next from cur_cust_level into @id,@Cacount
      –循环往下
      while(@@FETCH_STATUS=0)
      begin
      print @id+@Cacount
      fetch next from cur_cust_level into
      @id,@Cacount End 游标
      –关闭游标close cur_cust_level
      –释放游标deallocate cur_cust_level
      declare cur_statis Cursor
      for
      select year(ConsumerTime) yy,month(ConsumerTime) mm,day(ConsumerTime)dd,sum(ConsumerAmount) yye from Customers
      group by year(ConsumerTime),month(ConsumerTime),day(ConsumerTime)
      –打开游标
      open cur_statis
      –浏览数据并获取
      declare @yy varchar(50)
      declare @mm varchar(50)
      declare @dd varchar(50)
      declare @yye int
      fetch next from cur_statis into @yy,@mm,@dd,@yye
      while(@@FETCH_STATUS=0)
      begin
      insert into Statis values(@yy,@mm,@dd,@yye)
      fetch next from cur_statis into @yy,@mm,@dd,@yyeend
      –关闭游标
      close cur_statis
      deallocate cur_statis
      select * from Statis
    展开全文
  • MySQL数据库——游标

    千次阅读 2019-02-28 16:42:18
    一、游标简介 ...游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。 2、游标的特性 游标具有三个属性: A、不敏感(Asensitive):数据库可以选择不复制结果集 B、只读(...

    一、游标简介

    1、游标简介

    游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
    尽管游标能遍历结果中的所有行,但一次只指向一行。
    游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。

    2、游标的特性

    游标具有三个属性:
    A、不敏感(Asensitive):数据库可以选择不复制结果集
    B、只读(Read only)
    C、不滚动(Nonscrollable):游标只能向一个方向前进,并且不可以跳过任何一行数据。

    3、游标的优点

    游标是针对行操作的,对从数据库中SELECT查询得到的结果集的每一行可以进行分开的独立的相同或不同的操作,是一种分离的思想。游标是面向集合与面向行的设计思想之间的一种桥梁。

    4、游标的缺点

    游标的主要缺点是性能不高。
    游标的开销与游标中进行的操作相关,如果在游标中进行复杂的操作,开销会非常高。如果采用面向集合的SQL语句,扫描成本为O(N);但如果采用面向集合的SQL语句的扫描成本为O(N*N),则使用游标有可能会带来性能上的提升。
    游标的缺点是只能一行一行操作。在数据量大的情况下,速度过慢。数据库大部分是面对集合的,业务会比较复杂,而游标使用会有死锁,影响其他的业务操作,不可取。 当数据量大时,使用游标会造成内存不足现象。

    5、游标的适用场景

    MySQL数据库中,可以在存储过程、函数、触发器、事件中使用游标。

    二、游标的操作

    1、游标的定义

    DECLARE cursor_name CURSOR FOR select_statement  

    2、打开游标

    OPEN cursor_name;

    3、取游标中的数据

    FETCH cursor_name INTO var_name [, var_name]...

    4、关闭游标

    CLOSE cursor_name;

    5、释放游标

    DEALLOCATE cursor_name;

    三、游标实例

    1、创建一张游标的测试表

    CREATE TABLE cursor_table
    (
    id INT ,
    name VARCHAR(10),
    age INT
    )ENGINE=innoDB DEFAULT CHARSET=utf8;
    insert into cursor_table values(1, '孙悟空', 500);
    insert into cursor_table values(2, '猪八戒', 200);
    insert into cursor_table values(3, '沙悟净', 100);
    insert into cursor_table values(4, '唐僧', 20);

    使用三种方式使用游标创建一个存储过程,统计年龄大于30的记录的数量。

    2、Loop循环

    CREATE  PROCEDURE getTotal()
    BEGIN  
        DECLARE total INT; 
        ##创建接收游标数据的变量  
        DECLARE sid INT;  
        DECLARE sname VARCHAR(10);  
        #创建总数变量  
        DECLARE sage INT;  
        #创建结束标志变量  
        DECLARE done INT DEFAULT false;  
        #创建游标  
        DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age>30;  
        #指定游标循环结束时的返回值  
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;  
        #设置初始值  
        SET sage = 0;  
        SET total=0;
        #打开游标  
        OPEN cur;  
        #开始循环游标里的数据  
        read_loop:loop  
        #根据游标当前指向的一条数据  
        FETCH cur INTO sid,sname,sage;  
        #判断游标的循环是否结束  
        IF done THEN  
            LEAVE read_loop;    #跳出游标循环  
        END IF;  
        #获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,  
        SET total = total + 1;  
        #结束游标循环  
        END LOOP;  
        #关闭游标  
        CLOSE cur;  
    
        #输出结果  
        SELECT total;  
    END
    #调用存储过程  
    call getTotal();  

    3、While循环

    CREATE  PROCEDURE getTotal()
    BEGIN  
        DECLARE total INT; 
        ##创建接收游标数据的变量  
        DECLARE sid INT;  
        DECLARE sname VARCHAR(10);  
        #创建总数变量  
        DECLARE sage INT;  
        #创建结束标志变量  
        DECLARE done INT DEFAULT false;  
        #创建游标  
        DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age>30;  
        #指定游标循环结束时的返回值  
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;   
        SET total = 0;  
        OPEN cur;  
        FETCH cur INTO sid, sname, sage;  
        WHILE(NOT done) 
        DO  
            SET total = total + 1;  
            FETCH cur INTO sid, sname, sage;  
        END WHILE;  
    
        CLOSE cur;  
        SELECT total;  
    END

    4、Repeat循环

    CREATE getTotal()
    BEGIN  
        DECLARE total INT; 
        ##创建接收游标数据的变量  
        DECLARE sid INT;  
        DECLARE sname VARCHAR(10);  
        #创建总数变量  
        DECLARE sage INT;  
        #创建结束标志变量  
        DECLARE done INT DEFAULT false;  
        #创建游标  
        DECLARE cur CURSOR FOR SELECT id,name,age from cursor_table where age > 30;  
        #指定游标循环结束时的返回值  
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;   
        SET total = 0;  
        OPEN cur;  
        REPEAT  
        FETCH cur INTO sid, sname, sage;   
        IF NOT done THEN  
            SET total = total + 1;  
        END IF;  
        UNTIL done END REPEAT;  
        CLOSE cur;  
        SELECT total;  
    END
    展开全文
  • 微信公众号:小白图像与...Python学习笔记十二(数据库游标对象) introduction Python 中常用的 Database Drivers: Mysql、PostgreSQL、NoSQL Databases、Other Relational Databases(apsw、dataset、pymssql) ...
  • oracle 数据库游标学习

    2019-10-22 10:14:27
    游标(cursor ):是一种内存指针,用来存放SQL语句或程序执行后的结果。 游标的类型:显式(有条件的处理)隐式(如果是批量处理)。前者需要用户自定义,需要使用,用完关闭,后者为自动的,无需用户干预。 1....
  • SQL 游标使用示例

    2021-01-15 15:49:06
    SQL游标(cursor)详细说明及内部循环使用示例 定义     游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取...
  • 数据库游标概念讲解

    2011-08-24 17:00:51
    数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们...
  • PostgreSQL数据库游标文章快速说明索引游标 (Cursor) 简介游标 (Cursor) 使用游标 (Cursor) 特性 文章快速说明索引 学习目标: 熟练掌握PostgreSQL数据库 游标(cursor)的使用说明及特性总结 注:翻看全网的关于...
  • 本文我们主要介绍了Oracle数据库的五种类型的游标的使用,这五种游标分别是:隐式游标、显式游标、REF CURSOR、BULK SQL和动态性能表V$OPEN_CURSOR,希望能够对您有所帮助。 游标是SQL的一个内存工作区...
  • 概述:游标只读取结果集数据,一行一行的读取,而且只能从头开始一行行往尾部读取,不能从中任意读取,而如果重新使用则从第一个开始。使用前必先定义,具体模板看代码。作用是遍历结果集。 存储过程blog(点击) ...
  • 数据库中使用游标

    2020-05-10 20:05:19
    游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动混着浏览其中的数据。 游标主要用于交互式应用,其中用户...
  • 游标有四个属性先介绍俩个: %found %notfound 顾名思义,找到就是true,找不到就是false,下面演示一个小demol -- 查询并打印员工的姓名和薪水 set serveroutput on declare --定义一个光标 cursor ce
  • 1.数据库游标对象cursor 2.select实例 代码展示: 1 import pymysql 2 conn=pymysql.connect( 3 host='192.168.199.249', 4 port=3306, 5 user='root', 6 passwd='123456', 7 db='imooc...
  • Python 数据库游标对象

    2017-03-10 15:26:00
     进入正题,游标(cursor)是一个存储在 Mysql 上的数据库查询,不是一条语句,而是检索出来的结果集,在存储了游标之后,即可根据需要滚动或浏览其中的数据;  游标主要用于交互式应用,其中用户需要滚动屏幕...
  • 游标是什么? 游标是SQL 的一种数据访问机制。...数据库结构 游标代码 --根据价格设置每本书的等级 --价格50便宜 --50-100中等 -->=100 贵 --定义游标 declare cur_set_lever cursor for selec
  • oracle游标实例

    2013-01-09 17:14:10
    关于oracle数据库隐式游标、显式游标相关用法的详细实例,还不错
  • SQL Server 2008 游标使用实例

    万次阅读 2013-10-12 10:22:20
    本文使用以下两张数据库表作为演示对象。 1 游标初探--使用游标进行遍历 declare @classAndStudent table( class_id int, --班级ID class_name nchar(10), --班级名称 teacher nchar(10), --教师
  • SQL游标实例

    2008-06-02 09:35:33
    几程SQL游标的使用技巧.
  • 描述了一个很全的数据库开发过程,并有SQL脚本,包括存储过程和游标实例
  • 数据库游标

    2008-05-23 10:50:00
    数据库游标2007-10-10 15:40 游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_SQL 选择语句相关联...
  • 数据库_事务&游标

    2019-08-21 20:20:54
    比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎...
  • 数据库游标使用

    2016-02-18 15:58:00
    概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。游标的一个常见用途就是保存查询...
  • 本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下: 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的...
  • 实例为根据商品分类更新商品代码。DECLARE @sortcode varchar(20), @i int, @templetesortcode varchar(20) ,@goodscode varchar(20),@flowno char(3)select @templetesortcode = , @i = 0,@flowno = DECLARE c_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,819
精华内容 16,327
关键字:

数据库游标实例