数据库实验八
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系
实验报告
专业名称网络工程
课程名称数据库原理与应用
项目名称游标的应用
班级
学号
姓名
同组人员无
实验日期 2016.11.15
一、实验题目
游标的应用
二、实验目的
1.理解SQL的宿主使用方式。
2.掌握游标的使用方法。
三、实验内容
1、实验内容
1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息(基于前面实验建立的表和插入的数据)
2)按要求逐一读出游标中的记录,并在界面上显示。
2、实验原理
1)定义游标的SQL语句的一般格式是:
DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSOR
FOR
[FOR {READ ONL Y | 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 <游标名>
四、实验步骤与结果
上机实验时应该一人一组,独立上机。对出现的问题要善于自己发现问题所在,独立处理。
上机步骤:
1.调出SQL Server 2008软件的用户界面,进入SQL SERVER MANAGEMENT STUDIO。
2.输入自己编好的程序。
3.检查已输入的程序正确与否。
4.运行程序,并分析运行结果是否合理和正确。在运行时要注意当输入不同的数据时所得到的结果是否正确。
5.输出程序清单和运行结果。
过程分析:
1)参考例7-3建立一个嵌套游标应用,其功能是按学号升序列出全体学生信息(学号、姓名、院系名称)及其所修课程的名称和考试成绩信息。
根据题目要求建立一个游标emp_v1,再在游标emp_v1中嵌套了一个游标emp_v2
在游标emp_v1里定义局部变量@xuehao char(8),@xingming char(10),@yuanxi char(10)
在游标emp_v2里定义了局部变量@kecheng char(8),@chengji char(10)。游标emp_v1和游标emp_v2通过选课表里的学号与局部变量@xuehao相等来实现嵌套。然后依次打印出游标中记录的内容。
代码实现如下:
declare@xuehao char(8),@xingming char(10),@yuanxi char(10)
declare@kecheng char(8),@chengji char(10)
declare emp_v1cursor for select学生.学号,学生.姓名,院系.名称from dbo.学生join dbo.院系
on学生.院系=院系.编号
order by学号
open emp_v1
fetch from emp_v1into@xuehao,@xingming,@yuanxi
while@@FETCH_STATUS=0
begin
print'学号:'+@xuehao+'姓名:'+@xingming+'院系:'+@yuanxi
declare emp_v2cursor for select课程.课程名称,选课.成绩from dbo.选课join dbo.课程on课程.课程编号=选课.课程编号
where选课.学号=@xuehao
open emp_v2
fetch from emp_v2into@kecheng,@chengji
while@@FETCH_STATUS=0
begin
print@kecheng+@chengji
fetch from emp_v2into@kecheng,@chengji
end
close emp_v2
deallocate emp_v2
fetch from emp_v1into@xuehao,@xingming,@yuanxi
end
close emp_v1
deallocate emp_v1
2)按要求逐一读出游标中的记录,并在界面上显示。
执行代码逐一独处游标中定义的变量的记录
截图如下:
图1 读取游标记录
五、实验分析
(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)
问题:在一开始编写代码执行时发现独处游标中的记录时显示的并不是学生所在的院系名称而是所在院系编号。
错误截图如下:
图2 错误截图
分析:在定义一个游标emp_v1时,他的内容是select语句的执行结果,故在做select时直接选取了学生表里的院系而非院系表里的名称,从而导致最后读取游标的记录时打印出来的是院系编号而不是院系名称。
解决办法:在select选择语句里加了一个连接操作,将院系表与学生表做了一个连接从而选取院系表的名称这一属性。
执行语句改为:declare emp_v1cursor for select学生.学号,学生.姓名,院系.名称from dbo.学生join dbo.院系
on学生.院系=院系.编号
六、实验总结
通过本次实验我知道了关于游标的基本知识,他的基本思想是讲查询结果存储在一张临时表中,然后从临时表中逐一读出记录进行处理,这种临时表被称作游标。游标允许对返回结果集中每一行进行相同或不相同的操作,而不是一次对整个结果进行同一种操作。比较具有实际意义。
七、通过其它