【精选】操作游标的标准步骤

上传人:豆浆 文档编号:892610 上传时间:2017-05-20 格式:DOC 页数:3 大小:21.50KB
返回 下载 相关 举报
【精选】操作游标的标准步骤_第1页
第1页 / 共3页
【精选】操作游标的标准步骤_第2页
第2页 / 共3页
【精选】操作游标的标准步骤_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《【精选】操作游标的标准步骤》由会员分享,可在线阅读,更多相关《【精选】操作游标的标准步骤(3页珍藏版)》请在金锄头文库上搜索。

1、游标操作基本步骤2010-08-30 21:391. 为何使用游标:使用游标(cursor)的一个主要的原因就是 把集合操作转换成单个记录处理方式。用 SQL 语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在 SQL server 内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。2. 如何使用游标:一般地,使用游标都遵循下列的常规步骤:(1) 声明游标。把游标与 T-SQL 语句的结果集联系起来。(2) 打开游标。(3) 使用游标操作数据。(4) 关闭游标。2.1. 声明游标DECLARE CURSOR 语句 SQL-92

2、标准语法格式:DECLARE 游标名 INSENSITIVE SCROLL CURSORFOR sql-statementEg:Declare MycrsrVar CursorFOR Select * FROM tbMyData2.2 打开游标OPEN MycrsrVar当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1 行。就本例而言,可以使用下列操作读取第1 行数据:FETCH FIRST from E1cursor或 FETCH NEXT from E1cursor2.3 使用游标操作数据 下面的示例用FETCH_STATUS 控制

3、在一个 WHILE 循环中的游标活动/* 使用游标读取数据的操作如下。*/DECLARE E1cursor cursor /* 声明游标,默认为 FORWARD_ONLY 游标 */FOR SELECT * FROM c_exampleOPEN E1cursor /* 打开游标 */FETCH NEXT from E1cursor /* 读取第1行数据*/WHILE FETCH_STATUS = 0 /* 用 WHILE 循环控制游标活动 */BEGINFETCH NEXT from E1cursor /* 在循环体内将读取其余行数据 */ENDCLOSE E1cursor /* 关闭游标 *

4、/DEALLOCATE E1cursor /* 删除游标 */2.4 关闭游标使用 CLOSE 语句关闭游标CLOSE GLOBAL 游标名 | 游标变量名 使用 DEALLOCATE 语句删除游标,其语法格式如下:DEALLOCATE GLOBAL 游标名 | 游标变量名3. FETCH 操作的简明语法如下:FETCH NEXT | PRIOR | FIRST | LASTFROM 游标名 | 游标变量名 INTO 变量名 , 参数说明:NEXT 取下一行的数据,并把下一行作为当前行(递增) 。由于打开游标后,行指针是指向该游标第 1行之前,所以第一次执行 FETCH NEXT 操作将取得游

5、标集中的第1 行数据。 NEXT 为默认的游标提取选项。INTO 变量名, 把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。-每执行一个 FETCH 操作之后,通常都要查看一下全局变量FETCH_STATUS 中的状态值,以此判断 FETCH操作是否成功。该变量有三种状态值: 0 表示成功执行 FETCH 语句。 -1 表示 FETCH 语句失败,例如移动行指针使其超出了结果集。 -2 表示被提取的行不存在。由于FETCH_S

6、TATU 是全局变量,在一个连接上的所有游标都可能影响该变量的值。因此,在执行一条FETCH 语句后,必须在对另一游标执行另一 FETCH 语句之前测试该变量的值才能作出正确的判断。下例显示如何嵌套游标以生成复杂的报表。为每个作者声明内部游标。SET NOCOUNT ONDECLARE au_id varchar(11), au_fname varchar(20), au_lname varchar(40),message varchar(80), title varchar(80)PRINT - Utah Authors report -DECLARE authors_cursor CURS

7、OR FORSELECT au_id, au_fname, au_lnameFROM authorsWHERE state = UTORDER BY au_idOPEN authors_cursorFETCH NEXT FROM authors_cursorINTO au_id, au_fname, au_lnameWHILE FETCH_STATUS = 0BEGINPRINT SELECT message = - Books by Author: +au_fname + + au_lnamePRINT message- Declare an inner cursor based - on

8、au_id from the outer cursor.DECLARE titles_cursor CURSOR FORSELECT t.titleFROM titleauthor ta, titles tWHERE ta.title_id = t.title_id AND ta.au_id = au_id - Variable value from the outer cursorOPEN titles_cursorFETCH NEXT FROM titles_cursor INTO titleIF FETCH_STATUS WHILE FETCH_STATUS = 0BEGINSELECT message = + titlePRINT messageFETCH NEXT FROM titles_cursor INTO titleENDCLOSE titles_cursorDEALLOCATE titles_cursor- Get the next author.FETCH NEXT FROM authors_cursorINTO au_id, au_fname, au_lnameENDCLOSE authors_cursorDEALLOCATE authors_cursorGO

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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