数据库实验六:游标的使用

  • 格式:doc
  • 大小:104.50 KB
  • 文档页数:5

数据库实验六:游标的使用

一、实验目的与要求:

1.实验目的

(1)理解SQL的宿主使用方式。

(2)掌握游标的使用方法。

2.实验要求

(1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息(基于前面实验建立的表和插入的数据)

(2)按要求逐一读出游标中的记录,并在界面上显示。

(3)可以交互对记录进行修改。

二、实验内容

1、实验原理

(1)定义游标的SQL语句的一般格式是:

DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSOR

FOR

[FOR {READ ONLY | UPDATE [OF <列名>[,<列名>…]]}]

(2)打开游标的SQL语句的一般格式是:

OPEN <游标名>

(3)从游标中读记录的SQL语句的一般格式是:

FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ]

<游标名>

[INTO: <主变量1>,:<主变量2>…]

(4)关闭游标的SQL语句的一般格式是:

CLOSE <游标名>

(5)释放游标

DEALLOCATE <游标名> (6)使用游标的UPDATE命令的格式是:

UPDATE <表名>

SET <列名>={<表达式>| NULL }[,<列名>={<表达式>| NULL }…]

WHERE CURRENT OF <游标名>

(7)使用游标的DELETE命令的格式是:

DELETE FROM <表名>

WHERE CURRENT OF <游标名>

2、实验步骤与结果

(1)调出SQL Server2005软件的用户界面,进入SQL SERVER MANAGEMENT

STUDIO。

(2)输入自己编好的程序。

(3)检查已输入的程序正确与否。

(4)运行程序,并分析运行结果是否合理和正确。在运行时要注意当输入不同的数据时所得到的结果是否正确。

(5)输出程序清单和运行结果。

(1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息(基于前面实验建立的表和插入的数据)

(2)按要求逐一读出游标中的记录,并在界面上显示。

(3)可以交互对记录进行修改。

代码及截图:

declare @xuehao char(10), @xingming char(10), @yuanxi char(10)

declare @kecheng char(10), @chengji smallint

declare xuesheng_cursor cursor for select 学号, 姓名, 院系 from 学生

open xuesheng_cursor

fetch from xuesheng_cursor into @xuehao, @xingming, @yuanxi

while @@FETCH_STATUS = 0

begin

print '学号:'+@xuehao+' 姓名:'+@xingming+' 院系:'+@yuanxi

declare kecheng_cursor cursor for select 课程名称, 成绩 from 选课, 课程 where 选课.学号

= @xuehao and 课程.课程编号 = 选课.课程编号

open kecheng_cursor

fetch from kecheng_cursor into @kecheng, @chengji

while @@FETCH_STATUS = 0

begin

print @xingming+'的选课是:'+@kecheng+' 成绩是:'+str(@chengji)

print ''

fetch from kecheng_cursor into @kecheng, @chengji

end

close kecheng_cursor

deallocate kecheng_cursor

fetch from xuesheng_cursor into @xuehao, @xingming, @yuanxi

end

close xuesheng_cursor

deallocate

xuesheng_cursor

declare @AVGM smallint,@StuNum smallint

declare AVGM cursor for select 学号,平均成绩 from 学生

open AVGM

fetch from AVGM into @StuNum,@AVGM while @@FETCH_STATUS=0

begin

if @AVGM <60

begin

update 学生

set 平均成绩 =59

where 学号=@StuNum

print '修改了一名学生的成绩'

end

fetch from AVGM into @StuNum,@AVGM

end

close AVGM

deallocate AVGM

三、实验分析与小结:

(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析; 有待优化思路)

1、实验过程中的问题分析、产生的原因以及解决方法。

2、实验结果分析; 有待优化思路。

在实验过程中应该特别注意:内、外层都是用全局变量@@FETCH_STATUS进行控制,该变量的值取决于最近一次FETCH语句的执行结果。

四、其它 思考题:

1、游标的作用?

答:游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。主语言是面向记录的,一组主变量一次只能存放一条记录。仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求。嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式。

得分(百分制)