数据库原理与运用

上传人:cl****1 文档编号:484498799 上传时间:2023-02-01 格式:DOCX 页数:5 大小:17.45KB
返回 下载 相关 举报
数据库原理与运用_第1页
第1页 / 共5页
数据库原理与运用_第2页
第2页 / 共5页
数据库原理与运用_第3页
第3页 / 共5页
数据库原理与运用_第4页
第4页 / 共5页
数据库原理与运用_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《数据库原理与运用》由会员分享,可在线阅读,更多相关《数据库原理与运用(5页珍藏版)》请在金锄头文库上搜索。

1、第10章 游标的管理10.11 游标的概念游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个 游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主 语言进行处理。从本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次 提取一条记录的机制。游标总是与一个结果集关联在一起,它可以指向结果集中的任 一行。游标(Cursor)是一种处理数据的方法,为了查看或者处理结果集中的数据,游标 提供了在结果集中向前或者向后浏览数据的能力。可以把游标看成一种指针,它既可 以指向当前位置,也可以指向结果集中的任意位置,它允许用户对指定位置的数据

2、进 行处理,可以把结果集中的数据放在数组、应用程序中或其它地方。使用游标 (cursor) 的一个主要的原因就是把集合操作转换成单个记录处理方式。 用 SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含 有多个记录的集合。游标机制允许用户在 SQL server内逐行地访问这些记录,按照用 户自己的意愿来显示和处理这些记录。10.1.2 游标的优点 允许程序对由查询语句SELECT返回的行集合中的每一行数据执行相同或不 同的操作,而不是对整个行集合执行同一个操作 提供对基于游标位置的表中的行进行删除和更新的能力 游标实际上作为面向集合的数据库管理系统(RDBMS)和面

3、向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来10.1.3 游标的作用及其实现过程游标的作用可以分为两种:1. 作为结果集的指针;2. 用于保存查询结果集;使用游标的步骤 创建游标。使用T-SQL语句生成一个结果集,并且定义游标的特征,如游 标中的记录是否可以修改。 打开游标 。 从游标的结果集中读取数据。从游标中检索一行或多行数据称为取数据。 对游标中的数据逐行操作。 关闭和释放游标 。10.2 创建游标10.2.1 基本语法-声明游标是指用DECLARE语句声明或创建一个游标。-声明游标的语法如下:DECLARE cursor_name SCROLL CURSORFOR sel

4、ect_statementFOR READ ONLY|UPDATEOF column_name_list其中: cursor_name:是游标的名字,为一个合法的SQL Server标识符,游标的名字必须遵循SQL Server命名规范。 SCROLL:表示游标的滚动方式。如果选择了SCROLL,则表示可以进行任何方向的滚 动。可以使用关键字NEXT、PRIOR、FIRST、LAST、ABSOLUTE、RELATIVE。女口 果没有选择SCROLL,则对游标只能进行向前滚动(NEXT)。 select_statement:是定义游标结果集的标准SELECT语句,它可以是一个完整语法和语 义的T

5、ransact-SQL的SELECT语句。但是这个SELECT语句必须有FROM子句,不允许使 用关键字 COMPUTE、 COMPUTE BY、 FOR BROWSE 和 INTO。 FOR READ ONLY:指出该游标结果集只能读,不能修改。 FOR UPDATE:指出该游标结果集可以被修改。 OF column_nameist:列出可以被修改的列的名单。 应该注意: 游标有且只有两种方式:FOR READ ONLY或FOR UPDATE0 当游标方式指定为FOR READ ONLY时,游标涉及的表不能被修改。 当游标方式指定为FOR UPDATE时,可以删除或更新游标涉及的表中的行。通

6、常, 这也是缺省方式,即不指定游标方式时为FOR UPDATE方式。 声明游标的DECLARE CURSOR语句必须是在该游标的任何OPEN语句之前。例1: 声明一个只读游标,且该游标只能对计算机专业的学生学号,姓名进行操作.DECLARE stu_cursor CURSORFORselect sno,sname from studentwhere sdep=CSFOR READ ONLY例2: 声明一个全局游标,且该游标只能对计算机专业的学生学号,姓名进行操作.DECLARE stu_cursor CURSOR GLOBAL FORselect sno,sname from student

7、where sdep=CS静态游标的特点是,在打开游标时游标的完成结果集被保存在Tempdb数据库中。例3: 声明一个静态游标,且该游标只能对计算机专业的学生学号,姓名进行操作.DECLARE stu_cursor CURSOR STATIC FORselect sno,sname from student where sdep=CS10.3 打开游标创建游标也就是声明游标,这个过程并没有对数据表进行任何操作。游标创建以后需要使用 Open语句对其打开。打开游标的语法如下:OPEN cursor_name其中: cursor_name是一个已声明的尚未打开的游标名。注意: 当游标打开成功时,游

8、标位置指向结果集的第一行之前。 只能打开已经声明但尚未打开的游标。 当执行打开游标的语句时,服务器执行声明游标时使用的SELECT语句10.4 检索游标数据 FETCH 游标的主要应用之一就是检索游标中的数据,实现对数据集中的数据进行逐行提取操作。 检索游标的语法如下:FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE FROM cursor_name INTO fetch_target_list 其中:cursor_name:为一已声明并已打开的游标名字。NEXTIPRIORIFIRSTILASTIABSOLUTEIRELATIVE:游标移动方向,缺省

9、情况下是 NEXT,即向下移动。NEXT:取下一行数据。PRIOR :取前一行数据。FIRST:取第一行数据。 LAST:取最后一行数据。ABSOLUTE:按绝对位置取数据。RELATIVE:按相对位置取数据。游标位置确定了结果集中哪一行可以被提取,如果游标方式为FOR UPDATE的话,也就 确定该位置一行数据可以被更新或删除。INTO fetch_target_list:指定存放被提取的列数据的目的变量清单。这个清单中变量的 个数、数据类型、顺序必须与定义该游标的Select_statement的SELECTist中列出的列清 单相匹配。为了更灵活地操纵数据,可以把从已声明并已打开的游标结

10、果集中提取的列 数据,分别存放在目的变量中。INTO fetch_targetist是T-SQL对ANSI-92 SQL标准的扩 充。 当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1 行数据,必须移动行指针使其指向第1行。可以使用下列操作读取第1行数据: Eg: Fetch next from mycursor如果定义游标的时候定义了 scroll,则可用所有读取方式,如果没有定义,则为只进性 游标,只能用n ext读取方式.遍历游标/*检查FETCH_STATUS以确定是否还可以继续取数*/ WHILE FETCH_STATUS = 0 BEGIN FETCH NE

11、XT FROM authors_cur END10.5 关闭游标关闭(Close)游标是停止处理定义游标的那个查询。关闭游标并不改变它的定义,可以再 次用open语句打开它,SQL Server会用该游标的定义重新创建这个游标的一个结果集。 关闭游标的语法如下:CLOSE cursor_name其中:cursor_name:是已被打开并将要被关闭的游标名字。在如下情况下,SQL Server会自动地关闭已打开的游标: 当你退出这个SQL Server会话时从声明游标的存储过程中返回时10.6 释放游标释放(Deallocate)游标是指释放所有分配给此游标的资源,包括该游标的名字。 释放游标的

12、语法是:DEALLOCATE CURSOR cursor_name其中:cursor_name:将要被DEALLOCATE释放的游标名字。如果释放一个已打开但未被关 闭的游标,SQL Server会自动先关闭这个游标,然后再释放它。注意一下关闭游标与释放游标的区别:关闭游标并不改变游标的定义,一个游标关闭 后,不需要再次声明,就可以重新打开并使用它。但一个游标释放后,就释放了与该游 标有关的一切资源,也包括游标的声明,游标释放后就不能再使用该游标了,如需再次 使用游标,就必须重新定义。【例13-1】定义一个游标,将教师表teacher中所有教师的教师姓名、教师职称显示出来。USE jwglGO

13、DECLARE teach_name VARCHAR(8),teach_profession VARCHAR(16)DECLARE teacher_coursorSCROLL CURSOR FORSELECT teacher_name,profession FROM teacher FOR READ ONLYOPEN teacher_coursorFETCH FROM teacher_ coursor INTO teach_name,teach_professionWHILE FETCH_STATUS=0BEGINPRINT 教师姓名:+teach_name+职 称: + teach_prof

14、essionFETCH FROM teacher_ coursor INTO teach_ name , teach_professionENDCLOSE teacher_ coursorDEALLOCATE teacher_coursor10.7 使用游标修改数据通过在U PDATE语句中使用游标可以更新表或视图中的行。被更新的行依赖于游标位置的当前值. 语法: UPDATE 表名(或视图名) SET 列名= 修改后的值 WHERE CURRENT OF 游标名 【例】通过游标将学生表中第一条纪录的姓名改名 declare cur_c cursor for select * from xs for update of sname open cur_c fetch next from cur_c update xs set sname=bbb where current of cur_c close cur_c deallocate cur_c 10.8 使用游标删除数据语法:DELETE FROM 表名WHERE CURRENT OF 游标名 用于删除游标当前位置所在的行.删除一行后将游标位置向前移动一行。

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

当前位置:首页 > 办公文档 > 解决方案

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