数据库管理实务(五) 游标的应用与初探

本文详细介绍了数据库管理系统中游标的概念、作用和优势,特别关注于SQL Server中的服务器游标和客户游标。游标允许逐行处理结果集,提供灵活的数据处理方式。文中通过实例演示了如何声明、打开、使用、关闭和释放游标,以及如何通过游标进行数据更新和删除。最后,文章总结了游标在处理复杂查询和避免系统开销方面的价值。
摘要由CSDN通过智能技术生成

 游标的应用与初探

游标的概述

  1. 游标作为数据库的重要对象,不仅表现为一种数据访问机制,同时也是一种数据处理方法,具有对结果集进行逐行处理的能力;而且,游标还提供了一种对从表中检索出的数据定制各类操作的灵活手段。就本质而言,游标实际上即是一种能从包括多条数据记录的结果集中每次提取一条记录的机制游标就好比 C++ 语言中的指针,通过与某个查询结果构建技术联系,可以指定结果集中的任何位置,然后允许用户对指定位置的数据进行处理,以达到用户处理数据的复杂目的需求,如:在结果集中一次一行或者多行向前或向后浏览数据的操作。在游标的实现上,则总是与一条 T-SQL 语句相关联。这是因为游标是由结果集和结果集中指向特定记录的游标位置集结联合所组成。其中,游标结果集是定义游标的 SQL 语句返回的行的集合,游标位置则是指向这个行集合中某一行的当前指针。在SQL Server 中,用户可以通过 SQL 语句逐一地从游标中读取记录,还可以使用游标处理结果集中的数据,具体包括了更新、删除等操作。
  2. SQL 游标的作用及优势
  1. 游标允许用户访问或处理一个集合里的单独数据行,而不受其他行的限制约束,这也是游标设计上的鲜明优势。基于此,用户就可以使用这些数据生成 SQL 代码并立即执行或输出,这样就能降低系统开销和潜在的阻隔情况。
  2. 使用游标查看或处理数据使得用户的操作过程更加灵活、高效、方便。
  3. 在 SQL Server 数据库系统中,游标可分为服务器游标和客户游标。相对于客户游标而言,服务器游标可以大大减少网络数据传输的开销,从而提高应用程序访问数据库的速度和效率。
  4. 作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的设计媒介,游标可使得这 2 种处理方式能够获得有效拓展连接。

游标的使用

  1. 游标是对表操作方式的一种限制或改变。以单条记录的方式读取表中的信息来处理。游标包括:声明、打开、应用、关闭、释放操作。
  2. 声明:DECLARE 游标名 CURSOR

               [选项参数]

               FOR  <SELECT 命令>

              [FOR UPDATE [ OF 字段名1 [,…] ]

  1. 打开:OPEN 游标名,其中需要注意两点:
  1. 若打开的是全局游标,则必须添加关键字 Global,否则打开的就将是默认的局部游标。
  2. 游标的打开可能会产生问题,SQL Server 即是通过@@ Error 全局变量的值来判断游标打开的成功与否:为 0 表示成功,为 1 表示失败。
  1. 关闭游标:CLOSE 游标名
  2. 释放游标:DEALLOCATE 游标名称
  3. 游标被释放后就不能重新打开了,除非再次重新声明游标
  4. 在打开游标后,可以用FETCH命令使用游标。

       FETCH
        [ [ NEXT | PRIOR | FIRST | LAST
                | ABSOLUTE  { n | @nvar }
                | RELATIVE  { n | @nvar }       ]
            FROM  ]
          { { [ GLOBAL ] cursor_name } |

                @cursor_variable_name }
            [ INTO @variable_name [ ,...n ] ]

  1. 一次取出一条记录。
  2. 该游标必须被声明为可更新的游标。没有关键字READ ONLY的游标原则上都是可更新的游标。
  3. 通过游标更新数据事实上是更新游标依赖的基表数据,游标指向当前行。所以应使游标能够指向单个表的当前行。可更新游标要求与可更新视图类似。

   UPDATE 表名

     SET 列名1 = {表达式1 | NULL (select语句) } [, …]

      WHERE CURRENT OF 游标名

  DELETE FROM  表名

      WHERE CURRENT OF 游标名

 

以实例测试游标

游标的应用重点可表现在 2 个方面:

1)使用游标从结果集中检索数据,以实现对数据的逐行查看,也就是平时经常遇到的一种操作———遍历。

2)使用游标可以对结果集中的数据进行更新或删除。改变游标中的数据,自然会影响到数据库中基础表的数据,若要使游标中的数据不致发生修改,则可以在声明游标时添加Insensitive 选项。

在此,将以某个学校学费收缴管理系统中的学校收费数据库为背景,研究给出 2 个具体实例来阐释说明 SQL Server中游标的使用方法和应用实现

实例一

利用游标遍历从 wbf 数据库的 wbf_UserTestInfo(学生信息表)和 wbf_UserTestSf(专业收费表)中显示所有文学院学生的专业代码(zydm)、专业名称(zymc)、隶属院系(lsyx)、学号(xh)和姓名(xm),并以报表的形式提供结果输出。当前数据库的基础表 wbf_UserTestInfo 和 wbf_UserTestSf,表的结构可如表 1 和表 2,字段 zydm、zymc 和 lsyx 来源于表 2,字段 zydm、xh 和 xm来源于表 1。2 张表将通过公共字段 zydm 建立连接。

--测试表wbf_UserTestInfo

CREATE TABLE wbf_UserTestInfo

(

rxnf INT,  --入学年份

xh char(10), --学号

xb varchar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值