1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数据库原理与应用(SQL Server)笔记 第十一章 游标

数据库原理与应用(SQL Server)笔记 第十一章 游标

时间:2020-06-25 18:38:51

相关推荐

数据库原理与应用(SQL Server)笔记 第十一章 游标

目录

前言一、游标的定义二、游标的声明三、游标的打开四、游标的使用五、游标的关闭六、游标的删除七、静态游标和动态游标结语

前言

本章内容将从六个方面介绍关于游标的知识,分别是其定义、声明、打开、使用、关闭、删除,另外还会介绍静态游标和动态游标。

一、游标的定义

当对由SELECT语句返回的结果集中的某一行或部分行进行单独处理时,就要用到一种扩展,也就是游标,游标提供了对一个结果集进行逐行处理的能力

游标可以保存查询结果,方便下文调用,因为使用游标会保存数据行的副本,在创建游标后,下文查询即可从副本中查询,比直接查数据库快很多。

二、游标的声明

游标包括两部分,一是游标结果集,即是由SELECT语句返回的结果集的集合,二是游标当前行指针,即指向该结果集中某一行的指针。

声明游标使用DECLARE CURSOR语句,格式如下:

DECLARE <游标的名称>(INSENSITIVE)(SCROLL)CURSOR/*INSENSITIVE表示对基表的任何改动都不会影响到游标数据中,且表示游标是只读的,不允许修改,也不能通过它修改基表的数据。*//*SCROLL表示使用所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE),若不指定只能使用NEXT提取选项。*/FOR <SELECT 语句>

三、游标的打开

当游标被打开时,其游标位置位于第一行。

打开游标使用OPEN语句,格式如下:

OPEN (GLOBAL)<游标的名称>/*GLOBAL表示打开的是全局游标,否则打开的是局部游标*/

四、游标的使用

使用FETCH语句使游标来提取数据,格式如下:

FETCH NEXT/PRIOR/FIRST/LAST/RELATIVE n/ABSOLUTE n FROM (GLOBAL)<游标的名称>(INTO <变量的名称>)/*INTO表示将读取的游标数据存放到指定的变量中,后跟变量的名称*/

这里的NEXT/PRIOR/FIRST/LAST/RELATIVE n/ABSOLUTE n用于表示游标读取数据的位置

(1)NEXT表示读取游标中当前行的下一行,且将其作为当前行;

(2)PRIOR表示读取游标中当前行的前一行,且将其作为当前行;

(3)FIRST表示读取游标中的第一行,且将其作为当前行;

(4)LAST表示读取游标中的最后一行,且将其作为当前行;

(5)RELATIVE n表示读取游标的当前行的前或后n行,若n>0,则读取游标当前行起向后的第n行数据,若n<0,则读取游标当前行起向前的第n行数据,且将其作为当前行;

(6)ABSOLUTE n表示读取游标从第一行或最后一行开始的第n行,若n>0,则读取从结果集的第一行(包括第一行)起向后的第n行,若n<0,则读取从结果集的最后一行起向前的第n行,且将其作为当前行。

五、游标的关闭

关闭游标使用CLOSE语句,格式如下:

CLOSE <游标的名称>

六、游标的删除

在关闭游标后,要释放其占用的系统空间,删除游标使用DEALLOCATE语句,格式如下:

DEALLOCATE <游标的名称>

例1、根据下表信息,在数据库Sales中,定义一个游标CURSOR_0求商品信息表第一行的商品信息。

> sql语句:

USE Sales DECLARE CURSOR_0 CURSOR FOR SELECT* FROM Product OPEN CURSOR_0 FETCH NEXT FROM CURSOR_0 CLOSE CURSOR_0 DEALLOCATE CURSOR_0

例2、根据信息,在数据库Sales中,定义一个游标CURSOR_3求销售员信息表员工的工号、姓名、性别、住址、电话信息。

这里使用了WHILE语句,其条件表达式中采用的@@FETCH_STATUS函数返回上一条游标FETCH语句的状态,当返回值为0,循环继续进行,否则退出循环,从而达到求销售员信息表的员工信息。

sql语句:USE Sales DECLARE @SaleID char(3),@Salename varchar(20),@Sex char(2), @Address varchar(60),@Telephone varchar(20) DECLARE CURSOR_3 CURSOR FOR SELECT SaleID,Salename,Sex,Address,Telephone FROM Seller OPEN CURSOR_3 FETCH NEXT FROM CURSOR_3 INTO @SaleID,@Salename,@Sex,@Address,@Telephone PRINT '工号 姓名 性别 住址 电话' PRINT '-------------------------------------------' WHILE @@FETCH_STATUS=0 BEGIN PRINT @SaleID+' '+@Salename+' '+@Sex+' '+@Address+' '+@Telephone FETCH NEXT FROM CURSOR_3 INTO @SaleID,@Salename,@Sex,@Address,@Telephone END CLOSE CURSOR_3 DEALLOCATE CURSOR_3

七、静态游标和动态游标

SQL Server支持的API服务器游标分为一下4种,分别是静态游标、动态游标、只进游标和键集驱动游标,这里只介绍前两种游标。

1、静态游标,即只有NEXT操作。

/SCROLL表示使用所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE),若不指定只能使用NEXT提取选项。/

上面例1、2定义的即是静态游标。

2、动态游标,有多种操作(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)。

例3、根据下表信息,在数据库Sales中,定义一个游标CURSOR_1求商品信息表最后一行的商品信息。

这里因为求得最后一行信息即要使用LAST,所以要在CURSOR前面加SCROLL,使其变为动态游标。

sql语句:USE Sales DECLARE CURSOR_1 SCROLL CURSOR FOR SELECT * FROM Product OPEN CURSOR_1 FETCH LAST FROM CURSOR_1 CLOSE CURSOR_1 DEALLOCATE CURSOR_1

例4、根据例3信息,在数据库Sales中,定义一个游标CURSOR_2分别求商品信息表中最后一行、游标当前行起前的第3行数据、游标当前行的前一行、表中第一行起向后的第2行、表中的第一行的数据。

sql语句:USE Sales DECLARE CURSOR_2 SCROLL CURSOR FOR SELECT * FROM Product OPEN CURSOR_2 FETCH LAST FROM CURSOR_2 --读取表中最后一行,且将其作为当前行 FETCH RELATIVE -3 FROM CURSOR_2 --读取游标当前行起前的第3行数据,且将其作为当前行 FETCH PRIOR FROM CURSOR_2 --读取游标当前行的前一行,且将其作为当前行 FETCH ABSOLUTE 2 FROM CURSOR_2 --读取表中第一行起向后的第2行,且将其作为当前行 FETCH FIRST FROM CURSOR_2 --读取表中的第一行,且将其作为当前行 CLOSE CURSOR_2 DEALLOCATE CURSOR_2

结语

以上就是本次数据库原理与应用的全部内容,篇幅较长,感谢您的阅读和支持,若有表述或代码中有不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。