sqlserver数据库技术及应用教学课件作者陈艳平第10章游标

上传人:E**** 文档编号:102557443 上传时间:2019-10-03 格式:PPT 页数:25 大小:1.92MB
返回 下载 相关 举报
sqlserver数据库技术及应用教学课件作者陈艳平第10章游标_第1页
第1页 / 共25页
sqlserver数据库技术及应用教学课件作者陈艳平第10章游标_第2页
第2页 / 共25页
sqlserver数据库技术及应用教学课件作者陈艳平第10章游标_第3页
第3页 / 共25页
sqlserver数据库技术及应用教学课件作者陈艳平第10章游标_第4页
第4页 / 共25页
sqlserver数据库技术及应用教学课件作者陈艳平第10章游标_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《sqlserver数据库技术及应用教学课件作者陈艳平第10章游标》由会员分享,可在线阅读,更多相关《sqlserver数据库技术及应用教学课件作者陈艳平第10章游标(25页珍藏版)》请在金锄头文库上搜索。

1、数据库应用,重庆航天职业技术学院,第10章 游标,理解游标机制 。 掌握游标的操作步骤 。,第10章 游标,任务设计: 10.1 认识游标 10.2 游标的基本操作 10.3 任务训练,第10章 游标,本章学习内容在数据库系统开发中的位置,10.1 任务1:认识游标,任务目标:,10.1 任务1:认识游标,关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。当我们仅需要对查询结果集中的某一条记录做处理的时候,游标提供了一种对从表中检索出的数

2、据进行操作的灵活手段,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。,10.1 任务1:认识游标,1游标的定义 在数据库中,游标是一个十分重要的概念。游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力。 游标的主要用途就是在T-SQL脚本程序、存储过程和触发器中对SELECT查询语句返回的结果集进行逐行逐字段处理,把一个完整的数据表按行分开,一行一行地逐一提取记录,并从这一记录中逐一提取各项数据,按照需要对相应行进行查询、修改或删除这些记录。 游

3、标主要包含以下两部分: 游标结果集:由定义游标的SELECT语句返回的行的集合。 游标位置:指向这个结果集中的某一行的指针。,10.1 任务1:认识游标,2游标的使用步骤 在使用游标时候,按照声明游标(declare)-打开游标(open)-处理数据(fetch)-关闭游标(close)-释放游标(deallocate)的顺序进行操作。,10.2 任务1:游标的基本操作,任务目标:,10.2.1 声明游标,游标语句的核心是定义了一个游标标识名,并把游标标识名和一个查询语句关联起来。DECLARE语句用于声明游标,它通过SELECT查询定义游标存储的数据集合。语句格式为: DECLARE cur

4、sor_name INSENSITIVE|scroll CURSOR for select_statement FOR READ ONLY| updateOF column_name1, column_name1, 参数说明: cursor_name:游标名称,游标命名规则符合标识符规定。 INSENSITIVE:定义一个游标,以创建将由该游标使用的数据的临时复本。使用该关键字,数据库表的更新数据不会体现在游标结果集中。 scroll:滚动。支持所有提取选项:next、prior、first、last、absolute、relative。 select_statement:是定义游标结果集的标

5、准SELECT语句。在游标声明的select_statement中不允许出现使用关键字COMPUTE、COMPUTE BY和INTO。 READY ONLY:禁止通过该游标进行更新。,10.2.1 声明游标,【例10-1】创建查询图书管理数据库读者记录数的游标。 查询分析器中输入如下代码: declare cursor_r scroll cursor for select * from reader -声明游标 执行T-SQL语句结果如图10-2。,10.2.2 打开游标,在使用游标提取数据之前,需要先将游标打开,其语法格式如下: open GLOBAL cursor_name|cursor_

6、variable_name GLOBAL:指定cursor_name是全局游标,默认是局部游标。 cursor_name:已声明的游标的名称。 cursor_variable_name:游标变量的名称,该变量引用一个游标。 打开游标语句执行游标定义中的查询语句,查询结果存放在游标缓冲区中。查询结果的内容取决与查询语句的设置和查询条件。当游标被打开时,指针指向游标区中的第一个元组,作为游标的缺省访问位置;如果error=0表示游标打开操作成功。SQL Server中,游标打开后,全局变量CURSOR_ROWS返回游标记录数,如表10-1所示。 表10-1 全局变量CURSOR_ROWS返回游标记

7、录数,10.2.2 打开游标,【例10-2】用游标函数查询图书管理数据库读者记录数。 USE Library GO declare cursor_r scroll cursor for select * from reader -声明游标 open cursor_r -打开游标 select CURSOR_ROWS cursor_r 游标行数 close cursor_r -关闭游标 deallocate cursor_r -释放游标 执行T-SQL语句结果如图10-3。,10.2.3 处理数据,1提取数据 游标打开之后,便可以使用游标提取某一行的数据。FETCH语句可以通过T-SQL 服务器

8、游标检索特定行,其语法格式如下: Fetch next| prior|first|last|absolute n|relative n From global|cursor_name into variable_name ,n 其中: first:返回游标中的第一行并将其作为当前行。 next:紧跟当前行返回结果行,且当前行递增为返回行。如果fetch next 为对游标的第一行提取操作,则返回结果集中的第一行。next为默认的游标提取选项。 prior:对游标的第一行提取操作,则没有返回并且游标至于第一行之前。 last: 返回游标中的最后行并将其作为当前行。 absolute n:若n0,

9、则返回从游标头开始向后的第n行,并将返回行变成新的当前行;若n0,则返回从当前行开始向后的第n行,并将返回行变成新的当前行;若n0,则返回从当前行开始向前的第n行,并将返回行变成新的当前行。如果n为0,则返回当前行。 into variable_name:允许将提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果集列的数据类型匹配,或是结果结果集列数据类型所支持的隐式转换。变量的数据必须与选择列表的列数一致。,10.2.3 处理数据,提示: 打开游标之后第一次执行fetch next,则将获取查询结果集中的第一行数据。 打开游标

10、后第一次执行fetch prior,则得不到任何数据。 可用fetch_status返回fetch操作之后,当前游标指针的状态。状态值如下: 0 表示行已成功读取。 -1表示读取操作已超出了结果集。 -2表示行在表中不存在。,10.2.3 处理数据,【例10-3】使用游标从“读者类型表”中逐行提取数据。 USE Library select * from ReaderType declare cursor_rt cursor for select * from ReaderType open cursor_rt -打开游标 fetch next from cursor_rt -取下一条数据 w

11、hile FETCH_STATUS=0 -成功读取 fetch next from cursor_rt close cursor_rt -关闭游标 deallocate cursor_rt -释放游标 运行结果如图10-4所示。,10.2.3 处理数据,2.修改数据 可利用游标修改指定行字段的值,修改数据的语法格式如下: update from 表或视图 set 列名=表达式中使用子句 where current of 游标名 【例10-4】使用游标更新“读者类型表”中第1行借书天数为50。 USE Library select * from ReaderType declare cursor

12、_rt cursor for select * from ReaderType open cursor_rt -打开游标 fetch cursor_rt -取下一条数据 update ReaderType set LimitDays=50 where CURRENT of cursor_rt -修改游标行数据 close cursor_rt -关闭游标 deallocate cursor_rt -释放游标 select * from ReaderType 运行结果如图10-5所示。,10.2.3 处理数据,3删除数据 可利用游标删除指定数据行,删除数据的语法格式如下: delete from

13、表或视图 where current of 游标名 【例10-5】使用游标删除“临时读者类型表”中第2行数据。 USE Library select * into tempReaderType from ReaderType declare cursor_rt cursor for select * from tempReaderType select * from tempReaderType open cursor_rt -打开游标 fetch cursor_rt -取下一条数据 fetch cursor_rt -取下一条数据 delete from tempReaderType wher

14、e current of cursor_rt -删除游标数据 close cursor_rt -关闭游标 deallocate cursor_rt -释放游标 select * from tempReaderType 运行结果如图10-5所示。,10.2.4 关闭、释放游标,打开游标之后,SQL Server服务器会专门为游标开辟一定的内存空间存放游标操作的数据结果集,同时游标的使用又会根据具体情况对某一些数据进行封锁。所以游标不用的时候一定要关闭,以通知服务器释放游标所占用的资源。 使用CLOSE语句释放当前结果集,然后家而出定位游标的行上的游标锁定,从而关闭一个开放的游标。关闭游标后,游标

15、区的数据不可再读。CLOSE语句关闭已打开的游标,之后不能对游标进行读取等操作,但可以使用OPEN语句再次打开该游标。 其语法格式为: CLOSE 游标名 游标结构本身会占用一定的计算机资源,所以在使用游标之后为了回收被游标所占用资源,应该将游标释放。DEALLOCATE语句删除定义游标的数据结构,删除后不可再用。其语法格式为: DEALLOCATE 游标名,10.2.4 关闭、释放游标,【例10-6】使用游标统计某门课程成绩分布。 USE EDUC GO create procedure cjtj -创建存储过程 课程号 varchar(10),人数 int output,优 int output, 良 int output, 中 int output, 及 int output,不 int output as begin declare 分数 decimal set 优=0 set 良=0 set 中=0 set 及=0 set 不=0 declare cursor_cj cursor local keyset for -声明游标 select grade -查找指定课程的学生成绩 from sc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号