关于sqlserverdeclare游标的详细介绍

上传人:xiao****1972 文档编号:84142956 上传时间:2019-03-02 格式:DOC 页数:8 大小:49.50KB
返回 下载 相关 举报
关于sqlserverdeclare游标的详细介绍_第1页
第1页 / 共8页
关于sqlserverdeclare游标的详细介绍_第2页
第2页 / 共8页
关于sqlserverdeclare游标的详细介绍_第3页
第3页 / 共8页
关于sqlserverdeclare游标的详细介绍_第4页
第4页 / 共8页
关于sqlserverdeclare游标的详细介绍_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《关于sqlserverdeclare游标的详细介绍》由会员分享,可在线阅读,更多相关《关于sqlserverdeclare游标的详细介绍(8页珍藏版)》请在金锄头文库上搜索。

1、关于SQL Server DECLARE游标的详细介绍 SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UN操作系统上的应用。专职优化、数据库、域名注册、网站空间、虚拟

2、主机、服务器托管、vps主机、服务器租用的中国信息港在这里为你做详细介绍!1. 定义游标定义 游标语句的核心是定义了一个游标标识名,并把游标标识名和一个查询语句关联起来。DECLARE语句用于声明游标,它通过SELECT查询定义游标存储的数据集合。语句格式为: DECLARE 游标名称 INSENSITIVE SCROLL CURSOR FOR select语句 FORREAD ONLY|UPDATEOF 列名字表 参数说明: INSENSITIVE选项:说明所定义的游标使用SELECT语句查询结果的拷贝,对游标的操作都基于该拷贝进行。因此,这期间对游标基本表的数据修改不能反映到游标中。这种游

3、标也不允许通过它修改基本表的数据。 SCROLL选项:指定该游标可用所有的游标数据定位方法提取数据,游标定位方法包括PRIOR、FIRST、LAST、ABSOLUTE n 和RELATIVE n 选项。 Select语句:为标准的SELECT查询语句,其查询结果为游标的数据集合,构成游标数据集合的一个或多个表称作游标的基表。 在游标声明语句中,有下列条件之一时,系统自动把游标定义为INSENSITIVE游标: SELECT语句中使用了DISTINCT、UNION、 GROUP BY或HAVING等关键字; 任一个游标基表中不存在唯一索引。 其他 READ ONLY选项:说明定义只读游标。 UP

4、DATE OF 列名字表选项:定义游标可修改的列。如果使用OF 列名字表选项,说明只允许修改所指定的列,否则,所有列均可修改。 例如,查询教师名字和所教的课程名,定义游标TCURSOR的语句如下 : DECLARE TCURSOR CURSOR FOR SELECT tname, cname FROM teacher ,couse WHERE teacher.tno = couse.tno 2. 打开游标 打开游标语句执行游标定义中的查询语句,查询结果存放在游标缓冲区中。并使游标指针指向游标区中的第一个元组,作为游标的缺省访问位置。查询结果的内容取决与查询语句的设置和查询条件。 打开游标的语句

5、格式: EXEC SQL OPEN 游标名 如果打开的游标为INSENSITIVE游标,在打开时将产生一个临时表,将定义的游标数据集合从其基表中拷贝过来。 SQL Server中,游标打开后,可以从全局变量CURSOR_ROWS中读取游标结果集合中的行数。 例1:打开前面所创建的查询教师姓名和所教课名称的游标。 OPEN tcursor 例2:显示游标结果集合中数据行数 SELECT 数据行数 = CURSOR_ROWS 3. 读游标区中的当前元组 读游标区数据语句是读取游标区中当前元组的值,并将各分量依次赋给指定的共享主变量。FETCH语句用于读取游标中的数据,语句格式为: FETCH NE

6、XT|PRIOR|FIRST|LAST| ABSOLUTE n| RELATIVE n FROM 游标名 INTO 变量1, 变量2, . 其中: NEXT:说明读取游标中的下一行,第一次对游标实行读取操作时,NEXT返回结果集合中的第一行。 PRIOR、FIRST、LAST、ABSOLUTE n 和RELATIVE n 选项只适用于SCROLL游标。它们分别说明读取游标中的上一行、第一行、最后一行、第n 行和相对于当前位置的第n 行。n 为负值时,ABSOLUTE n 和RELATIVE n 说明读取从游标结果集合中的最后一行或当前行倒数n行的数据。 INTO子句 说明将读取的数据存放到指定

7、的局部变量中,每一个变量的数据类型应与游标所返回的数据类型严格匹配,否则将产生错误。 如果游标区的元组已经读完,那么系统状态变量SQLSTATE的值被设为02000,意为no tuple found。 例如,读取tcursor中当前位置后的第二行数据 FETCH RELATIVE 2 FROM tcursor 4. 利用游标修改数据 SQL Server中的 UPDATE语句 和 DELETE语句也支持游标操作,它们可以通过游标修改或删除游标基表中的当前数据行。 UPDATE语句的格式为: UPDATE table_name SET 列名=表达式,n WHERE CURRENT OF curs

8、or_name DELETE语句的格式为: DELETE FROM table_name WHERE CURRENT OF cursor_name 说明: CURRENT OF cursor_name: 表示当前游标指针所指的当前行数据。CURRENT OF 只能在UPDATE和DELETE语句中使用。 注意: o使用游标修改基表数据的前提是声明的游标是可更新的。 o 对相应的数据库对象(游标的基表)有修改和删除权限。 5. 关闭游标 关闭游标后,游标区的数据不可再读。CLOSE语句关闭已打开的游标,之后不能对游标进行读取等操作,但可以使用OPEN语句再次打开该游标。 CLOSE语句的格式为:

9、 CLOSE 游标名 例如:关闭tcursor游标如下描述: CLOSE tcursor 6 删除游标语句 DEALLOCATE语句删除定义游标的数据结构,删除后不可再用。语句格式: DEALLOCATE 游标名 例如,删除tcursor游标 DEALLOCATE tcursor 例1,读JS2001班的学生的学号和姓名: #define MAX 30 EXEC SQL BEGIN DECLARE SECTION; char TN12, FU20; /定义主变量/ EXEC SQL END DECLARE SECTION; char tarn13012,tarn23020; /定义 C 变量/

10、 . . . . . . EXEC SQL /执行SQL语句,定义游标/ DCLARE Scursor CURSOR FOR /声明游标Scursor/ SELECT sno,sname /查询sno,sname/ FROM student /对student表chax 查询/ WHERE sclass = JS2001; /sclassJS2001的班级/ EXEC SQL OPEN Scursor ; /打开游标/ for (i=0; iMAX; i+) EXEC SQL FETCH FROM Scursor INTO TN, FU; /取到宿主变量/ tarn1= TN; /赋值到C数组

11、变量/ tarn2= FU; . EXEC SQL CLOSE Scursor ; /关闭游标/ EXEC SQL DEALLOCATE Scursor ; /删除游标/ 例2,定义游标,使结果集包括 pubs 数据库的 authors 表中的所有行和列。因为没指定 SCROLL 选项,FETCH NEXT 是唯一可用的提取选项。 DECLARE authors_cursor CURSOR FOR /声明游标authors_cursor / SELECT * FROM authors OPEN authors_cursor /打开游标authors_cursor / FETCH NEXT FR

12、OM authors_cursor /读游标authors_cursor中的一行 / . 例3, 定义和使用滚动游标 DECLARE tcursor SCROLL CURSOR FOR SELECT tname, cname FROM teacher ,couse WHERE teacher.tno = couse.tno; OPEN tcursor; 取tcursor中当前位置向下的第二行数据 FETCH RELATIVE 2 FROM tcursor 取tcursor中最后一行数据 FETCH LAST FROM tcursor 取tcursor中当前位置向前的第4行数据 FETCH RE

13、LATIVE -4 FROM tcursor 例4 利用 FETCH_STATUS 控制一个 WHILE 循环中的游标活动。 DECLARE S_Cursor CURSOR FOR SELECT sname, sno FROM student OPEN S_Cursor FETCH NEXT FROM S_Cursor WHILE FETCH_STATUS = 000000 BEGIN FETCH NEXT FROM S_Cursor END CLOSE S_Cursor DEALLOCATE S_Cursor 例5,职工普调工资,从最低工资调起,每人工资长10%,但工资总额不能超过50万元。

14、当调完 某个职工工资后,如果工资总额达到或超过50万元, 就不再调了,另外,如果职工全部调了一遍,工资总额还没到50万元,也到此为止。现有职工表emp,定义了一个游标cl,游标的查询语句取出职工号和工资 值,并按增序排列。下面是程序代码: void addsalary() EXEC SQL BEGIN DECLARE SECTION /声明SQL变量/ char empno8, e_sno,SQLSTATE6; float s_sal, e_sal; EXEC SQL END DECLARE SECTION; /声明SQL变量完/ EXEC SQL DECLARE cl CURSOR FOR

15、/定义游标 cl ,对emp表的eno,sal列可以作任何操作 SELECT eno, sal FROM emp ORDER BY sal ASC; EXEC SQL OPEN cl; /打开游标/ EXEC SQL SELECT SUM(sal) INTO s_sal FROM emp; /取工资总和到s_sal while(s_sal 500000.00) EXEC SQL FETCH FROM cl INTO e_sno , e_sal; /从游标中读出的数据放入e_sno,e_sal变量 If(SQLSTATE=02000) BREAK; /读完记录,退出/ EXEC SQL UPDATE emp SET sal=sal*1.1 /游标内容更新,将empno=e_sno相应的sal*1.1 WHERE empno

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

最新文档


当前位置:首页 > 大杂烩/其它

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