第12章 游标及其使用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第12章游标及其使用版权所有:中国信息大学信息工程学院计算机系严芬游标引例以前:使用SELECT语句对表格进行查询,返回的结果集包括所有满足条件的行。思考:如果要求每次只显示表格(例如上面的Course表)中的一行,该如何处理?——这在将T-SQL嵌入到其他高级语言(如C、VC、Delphi等)的编程中经常用到。版权所有:中国信息大学信息工程学院计算机系严芬12.1游标概述可以将游标看作一种特殊的指针,它可以指向与它相关联的结果集中的任意一行,以便对当前位置的行进行处理。版权所有:中国信息大学信息工程学院计算机系严芬对于SELECT语句查询结果为多条记录时,必须以游标机制作为桥梁,将多条记录一次一条送至宿主程序处理,从而把对集合的操作转换为对单个记录的处理。版权所有:中国信息大学信息工程学院计算机系严芬游标提供了对一个结果集进行逐行处理的能力:1.在结果集中定位特定行。2.从结果集的当前位置检索行。3.支持对结果集中当前位置的行进行数据处理(修改/删除)。版权所有:中国信息大学信息工程学院计算机系严芬游标的类型1.Transact_SQL服务器游标Transact_SQL游标是由DECLARECURSOR语法定义、主要用在Transact_SQL脚本、存储过程和触发器中。Transact_SQL游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL语句或是批处理、存储过程、触发器中的Transact_SQL进行管理。Transact_SQL游标不支持提取数据块或多行数据。版权所有:中国信息大学信息工程学院计算机系严芬2.API服务器游标API游标支持在OLEDB,ODBC以及DB_library中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API游标函数,MSSQLSEVER的OLEDB提供者、ODBC驱动器或DB_library的动态链接库(DLL)都会将这些客户请求传送给服务器以对API游标进行处理。版权所有:中国信息大学信息工程学院计算机系严芬3.客户游标客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。由于API游标和Transact-SQL游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。版权所有:中国信息大学信息工程学院计算机系严芬12.2使用游标的步骤声明游标DECLARE〈游标名〉CURSORFOR〈SELECT语句〉[FOR{READONLY|UPDATE[OFcolumn_name[,…n]]}]功能:是一条说明性语句,这时DBMS并不执行SELECT指定的查询操作。版权所有:中国信息大学信息工程学院计算机系严芬打开游标使用OPEN语句语句格式:OPEN游标名;功能:打开游标实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中这时游标处于活动状态,指针指向查询结果集中第一条记录之前。版权所有:中国信息大学信息工程学院计算机系严芬移动游标指针,然后取当前记录使用FETCH语句语句格式:FETCH[NEXT|PRIOR|FIRST|LAST]FROM游标名[INTO主变量[,…n]]版权所有:中国信息大学信息工程学院计算机系严芬功能:指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。版权所有:中国信息大学信息工程学院计算机系严芬•NEXT:向前推进一条记;•PRIOR:向回退一条记录;•FIRST:推向第一条记录;•LAST:推向最后一条记录;•缺省值为NEXT。版权所有:中国信息大学信息工程学院计算机系严芬关闭游标使用CLOSE语句语句格式:CLOSE游标名;功能:关闭游标,释放结果集占用的缓冲区及其他资源。说明:游标被关闭后,就不再和原来的查询结果集相联系;被关闭的游标可以再次被打开,与新的查询结果相联系。版权所有:中国信息大学信息工程学院计算机系严芬删除游标使用DEALLOCATE语句从当前的会话中移除游标的引用。与声明游标配对,此时释放分配给游标的所有资源。游标释放之后不可以用OPEN语句重新打开,必须使用DECLARE语句重建游标。语法如下:DEALLOCATECursor_name版权所有:中国信息大学信息工程学院计算机系严芬【例】游标基本使用的例子声明一个名为CrsCourse的游标,该游标从Course表中检索所有记录。①使用DECLARECURSOR语句声明游标:DECLARECrsCourseCURSORFORSELECT*FROMCourseORDERBYCouNo版权所有:中国信息大学信息工程学院计算机系严芬②使用OPEN语句打开游标:OPENCrsCourse③使用FETCH语句,从游标中检索行:FETCHNEXTFROMCrsCourse版权所有:中国信息大学信息工程学院计算机系严芬④将当前记录的限选人数更改为22:UPDATECourseSETLimitNum=22WHERECURRENTOFCrsCourse⑤使用CLOSE语句关闭游标:CLOSECrsCourse⑥使用DEALLOCATE语句释放游标:DEALLOCATECrsCourse版权所有:中国信息大学信息工程学院计算机系严芬【例】使用FETCH将值存入变量。版权所有:中国信息大学信息工程学院计算机系严芬相关语法格式声明游标DECLAREcursor_nameCURSOR[FORWORD_ONLY|SCROLL]FORselect_statements打开游标OPENcursor_name使用游标FETCH[NEXT|PRIOR|FIRST|LAST]FROMcursorInto@variable_name版权所有:中国信息大学信息工程学院计算机系严芬关闭游标CLOSEcursor_name删除游标DEALLOCATIONcursor_name版权所有:中国信息大学信息工程学院计算机系严芬练习11.声明一个名为CrsStudent的游标,使其与“00电子商务班”的所有学生信息(学号、姓名)相关联,并逐行显示前三条学生信息。版权所有:中国信息大学信息工程学院计算机系严芬如果遍历整个结果集?使用@@fetch_status:该全局变量/配置函数返回被最后FETCH语句执行的游标的状态,返回类型为int:1.0:FETCH语句成功。2.-1:FETCH语句失败或此行不在结果集中。3.-2:被提取的行不存在。版权所有:中国信息大学信息工程学院计算机系严芬【例】利用游标遍历,显示整个结果集,并掌握@@fetch_status的方法。版权所有:中国信息大学信息工程学院计算机系严芬练习2使用游标遍历Course表,输出报名人数最多的课程的信息(课程编码、课程名称、报名人数)。版权所有:中国信息大学信息工程学院计算机系严芬练习3建立一个存储过程,利用游标求course表中某系(用户给定系代码)所开课程的最大报名人数,并把课程名称和最大报名人数作为输出变量返回给用户。版权所有:中国信息大学信息工程学院计算机系严芬本章小结游标——掌握重点:掌握游标的使用步骤、方法。

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功