SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章

上传人:E**** 文档编号:89186612 上传时间:2019-05-20 格式:PPT 页数:96 大小:758KB
返回 下载 相关 举报
SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章_第1页
第1页 / 共96页
SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章_第2页
第2页 / 共96页
SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章_第3页
第3页 / 共96页
SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章_第4页
第4页 / 共96页
SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章》由会员分享,可在线阅读,更多相关《SQL Server基础教程 教学课件 ppt 作者 董翔英 等 第10章(96页珍藏版)》请在金锄头文库上搜索。

1、10.1 游标概念 10.2游标操作,第十章 使用游标查询结果集,游标是用于标识使用ELECT语句 从一个或多个基本表中选取出的一个 结果集,类似于高级语言中的数据指 针,移动指针可以取得指针所指的数 据,通过移动游标也可以在结果集中 提取某行数据,通过游标可反映基本 表数据的变化,也可以通过游标修改 基本表数据。,10.1 游标概念,使用SELECT语句可以从一个 或多个表中选取到的某些结果行, 该结果行集就作为源表数据的一个 子集,称为数据子集,如图10-1。,一、数据子集,在查询分析器中执行 SELECT语句后,所选取的结果 会直接粘贴在屏幕上,如果需要 对所选择出来的数据做进一步处 理

2、的话,必须声明一个cursor来 代表所选择出来的数据子集, 当cursor创建后,往后对此数据 子集内的数据处理都必须通过此,cursor做为标识。 如果应用程序需要重复使用 同一个数据子集,那么创建一个 游标可以重复使用该数据子集。 如果数据子集是通过较为复杂的 选取命令得到,可以用游标保存 该数据子集,以便日后直接使用.,二、游 标,数据库游标(cursor)与字 处理程序屏幕上的光标类似,光 标可以在编辑文件中上下一行一 行滚动,可以前后一页一页翻 动,打开多个编辑文件时,每个 打开的编辑文件都有自己的光,标,在自身的文件中移动定位, 数据库游标的操作也如此。用游 标可以选择一组记录,

3、它可以在 这组记录上滚动,可以检查游标 所指的每一行数据,可以取出该 行数据进行再处理。事实上也可 以把游标想像成如同一个数据指,针,它指向一数据子集,该数据 子a集就是经过SELECT语句对 从单个表或多个表中选取出的结 果集,移动游标可以指向结果集中不同的记录行。 游标的使用需要先行定义, 然后再打开进行数据处理,其步,骤为: 关闭(close) 读取(fetch) 删除(deallocate) 声明(declare) 打开(open) 声明游标即创建或定义游标,向 系统申请游标所需内存。打开游,标,用游标定义中的选择结果集 填充游标。读取数据,一次检出 (fetch)一行记录的数据,直

4、到结果集的最后一行。使用完毕 后关闭游标,清空游标内数据。 删除不再需要的游标,释放分配 给游标的内存。游标使用流程如图10-2。,图10-2游标的使用流程,三、游 标 类 型,(一)静态游标 静态游标所标识的数据子集 即SELECT语句的结果集,通常 被存放在临时保存表中,该临时 表创建在tempdb数据库中。静 态游标内的数据在游标打开后就,不再变化,基本表的任何数据更 改(包括增加、删除或修改数 据)都不会反映到游标中,静态 游标只能是只读的,有时也称为 快照游标,它完全不受其他用户 行为的影响。 (二)动态游标,当动态游标在滚动时能反应 结果集内最及时和最新的数据, 基本表的数据变化能

5、够同步出现 在游标内,用户所做的所有 INSTER、UPDATE和DELETE 操作均通过游标反映出来,所以 游标内数据的行、列数据值或顺,序每次提取时都可能改变。 (三)只进游标 只进游标只能从头到尾顺序 提取数据,不能向后滚动,所以 在行提取后对行所做的更改对游 标是不可见的。该类游标只能使 用NEXT选项提取数据行。,(四)键集驱动游标 键集驱动游标是一种改进的 静态游标,它将键集存储在 tempdb数据库的临时表中,它 能检测到基本表中大部分非键值 的变化。 上述游标检测结果集变化的,能力和消耗系统资源(如在 tempdb 中所占的内存和空间) 的情况各不相同。游标仅当再次 提取行时才

6、会检测到行的更改, 数据源没有办法通知游标当前提 取行的更改。静态游标在滚动期 间很少或更本检测不到变化,虽,然它在 tempdb 中存储了整个游 标,但消耗的资源很少。尽管动 态游标使用 tempdb 的程度最 低,在滚动期间它能够检测到所 有变化,但消耗的资源也更多。 键集驱动游标介于二者之间,它 能检测到大部分的变化,但比动,态游标消耗更少的资源。 另外游标还具有以下属性: 1、只读游标游标内数据不能 修改,即不能通过游标修改基本 表数据。静态游标属于只读游 标。 2、可修改游标游标内数据可,以修改,即可以修改游标当前数 据,其修改结果会影响到基本 表。 3、滚动游标相对于只进游 标,滚

7、动游标可以前、后滚动, 可使用所有的提取选项 (FIRST、LAST、PRIOR、,NEXT、RELATIVE和 ABSOLUTE)。 4、快速只进游标一种优化的只进游标,它提取的行的数据总是最新的,行在被提取之前所做的修改可以反映出来,行提取之后的修改不可见。,SQL Server 将只进和滚动 都作为能应用到静态游标、键集 驱动游标和动态游标的选项。 图10-3示意图说明了当基本 表数据发生改变时,动态游标所 标识的子集将发生应变化,而静 态游标所标识的基本表数据数据,子集动态游标静态游标可修改游 标只读游标标数据子集不会变 化。当据时,只读游标不能通过 修改游标所标识的数据子集而改 变基

8、本表数据,可修改游标则可 以。,一、游 标 声 明,游标必须先声明后才能使用,声 明的主要内容如下: ()游标名称 ()数据子集的来源(源表和指定列) ()选取条件(WHERE表达,10.2游标操作,式) ()游标属性(只读或可操 作) 使用DECLARE CURSOR命 令声明游标,其语法格式有两 种,符合SQL-92标准的语法格 式一和SQL Server扩展的语法,格式二 。 1、语法格式一 DECLARE cursor_name INSENSITIVESCROLLCURSOR FOR select_statement,FOR READ ONLY | UPDATE OF column_n

9、ame,n 参数说明如下: cursor_name为游标名,与某个 查询结果相关联,作为查询结果 集的符号名。,下面用cursor表示所定义的游 标。 INSENSTIVE关键字指定cursor 为静态游标。SQL Server将 cursor定义所选取出来的数据放 在一临时保存表(创建于 tempdb数据库内)中,所有对,cursor的读取皆来自该临时保存 表,cursor基本表内容变化时, cursor内数据不会跟着一起变 化,即结果集不变。 在这种情况下,不能通过此 类cursor去操作基本表。如果不 指定INSENSTIVE关键字,则任,何用户对基本表提交的删除和更 新都反映在后面的提

10、取中。 SCROLL关键字说明该cursor为 滚动游标,它可以前后滚动,可 使用所有的提取选项选取数据 行。如果不指定SCROLL,则为 只进游标,只能使用NEXT选项,提取数据行。 select_statement为SELECT语 句,由该查询生成与cursor相关 联的结果集。SELECT语句中不 能使用COMPUTE、COMPUTE BY、FOR BROWSE 和INTO关 键字。如果在SELECT语句中有,以下情况出现,该cursor将自动 设置INSENSITIVE关键字。 使用DISTINCT、UNION、 GROUP BY和HAVING关键字 基本表没有UNIQUE唯一索引使

11、用OUT JOIN外联接指定数值当 做选取列FOR READ ONLY子句,说明cursor为只读的,cursor内 的数据不能修改。UPDATE关键 字指定可以修改cursor内的数 据,其修改结果影响到基本表, 如果只允许cursor内数据的某些 列可被修改,则在 column_name处列出可修改的,列,否则可修改所有列。 【例10-1】从jsy表中选取“汽车 指挥”专业的所有记录,声明一 个只读、只进游标来标识该结果 集。 DECLARE jsy_cur1 CURSOR,KEYSET FOR SELECT 驾照号, 姓名, 出生年 月,籍贯 FROM jsy WHERE 所学专业=汽车

12、指 挥,ORDER BY 出生年月 FOR READ ONLY 上述语句声明jsy_cur游 标,它所关联的数据来自单个表 jsy,游标为只读,且只能从头 到尾读取数据。 注意jsy表一定要有主键索,引,或惟一索引,否则游标定义 错误。 2、语法格式二 DECLARE cursor_name CURSOR LOCAL | GLOBAL /*游标作用域*/,FORWARD_ONLY | SCROLL/*游标移动方向* STATIC | KEYSET | DYNAMIC | FAST_FORWARD /*游标类型*/ READ_ONLY | SCROLL_LOCKS |,OPTIMISIC /*游

13、标访问属性*/ FOR select_statement /*条件查询语句*/ FOR UPDATE OF column_name,n /*可修改的列*/ 参数说明如下:,cursor_name 为游标名称,下 面用cursor表示所定义的游标。 LOCAL、GLOBAL关键字指定 cursor的作用域,其中LOCAL 关键字指定cursor为局部游标, 作用域为创建此cursor的存储过 程、触发器或批处理文件,其他,存储过程等无法使用它。 GLOBAL关键字指定cursor为全 局游标,适用于本次连接所有的 存储过程、触发器或批处理文 件,只有在最后一个用户结束连 接时才会被释放。若两者均

14、未指 定,则默认由数据库选项中的,default to local cursor选项值 而定。 FORWARD_ONLY和SCROLL 关键字指定cursor的移动方向。 前者指定cursor为只进游标,只 能用FETCH NEXT命令来读取 cursor。后者指定cursor为滚动,游标,可使用FIRST、LAST、 PRIOR、NEXT、RELATIVE和 ABSOLUTE提取选项来读取 cursor。STATIC、KEYSET、 DYNAMIC 和FAST_FORWARD 关键字指定cursor的操作类型, 分别为静态游标、键集驱动游,标、动态游标和快速只进游标。 READ_ONLY、

15、SCROLL_LOCKS和OPTIMISIC 关键字指定cursor的访问属性, 分别为只读游标、游标数据可更 新和游标数据不可更新。 定义游标时,要注意选项的应用,规则,通常有以下规则: ()当指定cursor操作类型, 不指定移动属性时,默认为 SCROLL游标。当指定cursor移 动属性,不指定操作类型时,默 认为DYNAMIC游标。 ()当同时不指定cursor操作,类型和移动方向时,默认为 FAST_FORWARD。如果指定 了FAST_FORWARD,则不能 指定FORWARD_ONLY、 SCROLL、SCROLL_LOCKS、 OPTIMISTIC和FOR UPDATE关 键

16、字。,【例10-2】声明一键集驱动游 标,选取汽车指挥专业驾驶员的 驾照号、姓名和积分列。 DECLARE jsy_cur2 CURSOR KEYSET FOR SELECT 驾照号, 姓名, 积分,FROM jsy WHERE 所学专业=汽车指挥 【例10-3】声明一快速只进游 标,从jsy表中选取xc表中驾驶 车牌号为AX1320的所有驾驶员 的驾照号、姓名和积分。 DECLARE jsy_cur3,CURSOR FAST_FORWARD FOR SELECT a.驾照号, a.姓名, a.积 分 FROM jsy a, xc WHERE a.驾照号=xc.主驾,AND xc.车牌号=AX1320 游标声明定义了游标的属 性,游标使用前还需要打开游 标,用游标声明中的SELECT语 句的结果集填充游标,以便用户 能够读取数据,打开游标使用 OPEN语句,其语法格式为:,OPENGLOBALcursor_ name

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

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

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