数据库实验五答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库实验五答案
1.创建一个存储过程,查看001号课程的选修情况,包括学生学号、姓名和成绩,然
后执行该过程;
create procedure s11
as
select student.sno,sname,score
from student join sc on student.sno=sc.sno
where cno='001'
go
execute s11
2.创建一个存储过程,通过学生学号来查询学生选修情况,包括学生学号、姓名和成
绩,然后执行该过程;
create procedure s12 @cnumber char(5)
as
select student.sno,sname,score
from student join sc on student.sno=sc.sno
where student.sno= @cnumber
go
execute s12 '00001'
3.创建一个存储过程,通过学生学号来查询学生选修情况,默认查询学号为00001的
选修情况,包括学生学号、姓名和成绩,然后执行该过程;
create procedure s13 @cnumber char(5)='00001'
as
select student.sno,sname,score
from student join sc on student.sno=sc.sno
where student.sno= @cnumber
go
execute s13 '00005'
execute s13
4.创建一个存储过程,获得选修某门课程的总人数,然后在执行该过程后把总人数显
示出来;
create procedure s14 @cnumber char(5),@ccount int output
as
select @ccount=count(*) from sc where o=@cnumber
go
declare @ccount int
execute s14 '001' ,@ccount output
select @ccount
5.创建一个存储过程,通过学号和课程号进行成绩查询,如果查询结果为空,则显示
“该学生没有选这门课”,返回0,如果查询结果低于60分,则显示“该学生考试成绩不及格”,返回1,如果查询结果在60-85之间,则显示“该学生考试成绩为良”,返回2,如果查询结果大于85,则显示“该学生考试成绩为优秀”,返回3,然后执行该过程查询学号00001的选课成绩,并把返回结果显示出来。
create procedure s16 @sno char(5),@cno char(3)
as
declare @s int
select @s=score
from sc
where cno=@cno and sno=@sno
if @s=NULL
begin
print '该学生没有选这门课'
return 0
end
else if @s<60
begin
print '该学生考试成绩不及格'
return 1
end
else if @s<85
begin
print '该学生考试成绩为良'
return 2
end
else
begin
print '该学生没考试成绩为优'
return 3
end
go
declare @result int
exec @result=s16 '00001','004'
print @result
6.通过对象资源管理器创建问题5的存储过程。
7.声明一个只读游标,数据来源是表Student的所有情况,按照名字排序,打开该游标,查看该游标一共有多少行,提取第1行数据,第2行数据,第3行数据,试试把当前行的年龄改为50看看;
declare s_sur4 cursor
for
select * from student order by sname
for read only
open s_sur4
select @@cursor_rows
fetch s_sur4
fetch next from s_sur4
fetch next from s_sur4
update student
set sage=50
where current of s_sur4
fetch last from s_sur4
出现错误,因为只是可读
8.声明一个可滚动(SCROLL)的只读游标,数据来源是选择表Student的姓名和学号,按照名字排序,提取第5行数据,并把数据的学号和姓名赋予给变量学号和姓名(对比9理解SCROLL的作用);
declare s_sur7 scroll cursor
for
select sno,sname from student order by sname
for read only
open s_sur7
declare @学号char(5),@姓名varchar(10)
fetch absolute 5 from s_sur7
into @学号, @姓名
select @学号,@姓名
fetch last from s_sur7
9.声明一个具有灵敏性(INSENSITIVE)的游标,数据来源是表Student的所有情况,按照名字排序;
declare s_sur8 insensitive cursor
for
select sno,sname from student order by sname
for read only
10.声明一个可更新的游标,数据来源是表Student的所有情况,打开该游标,提取第1行数据,并把当前行的年龄改为50,然后查看基本表看是否已经修改;
declare s_sur10 cursor
for
select* from student
for update
open s_sur10
fetch s_sur10
update student
set sage=50
where current of s_sur10
select *
from student
11.试试看能不能声明一个有SCROLL或INSENSITIVE的可更新的游标。
不能。