实验五 存储过程创建与应用
一、实验目的
使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。
二、实验内容
(1)利用企业管理器创建存储过程student_grade,要求实现如下功能:查询“学生-课程”数据库中每个学生各门功课的成绩,其中包括每个学生的sno,sname,cname,grade。
(2)利用查询分析器创建名为proc_exp的存储过程,要求实现如下功能:从sc表中查询某一学生考试平均成绩。
(3)修改存储过程proc_exp,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格,成绩为XX分”,否则显示“此学生总和成绩不合格,成绩为XX分”。
(4)创建名为proc_add的存储过程,要求实现如下功能:向sc表中添加学生成绩记录。调用proc_add,向sc表中添加学生成绩记录。
(5)调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格。 (6)删除刚刚创建的proc_add和proc_exp两个存储过程。
三、实验过程
要求个人填写(要求有文字描述和适当的图片辅助说明) 1)
create procedure student_grade as
select student.sno,sname,cname,cgrade from student left outer join sc on student.sno=sc.sno
left outer join course on course.cno=sc.cno execute student_grade
2)create procedure proc_exp @student_sno varchar(10) as
select student.sno,avg(cgrade) as 平均成绩
from student left outer join sc on student.sno=sc.sno left outer join course on course.cno=sc.cno where student.sno=@student_sno group by student.sno execute proc_exp 95001
3)ALTER procedure proc_exp
@student_sno varchar(10),@student_avg_grade float output as
set @student_avg_grade= (
select avg(cgrade)
from student left outer join sc on student.sno=sc.sno left outer join course on course.cno=sc.cno where student.sno=@student_sno group by student.sno )
if @student_avg_grade>=60
print '此学生的综合成绩合格,成绩为'+ cast(@student_avg_grade as varchar(20))+'分' else
print '此学生的综合成绩不合格,成绩为'+ cast(@student_avg_grade as varchar(20))+'分'
declare @avg_grade float
execute proc_exp 95001,@avg_grade
4) create procedure proc_add @sc_sno varchar(10), @sc_cno varchar(10), @sc_cgrade smallint as begin
insert into sc(sno,cno,cgrade) values(@sc_sno,@sc_cno,@sc_cgrade); end
execute proc_add 95004 ,2 ,99
四、实验总结
要求个人填写(实验中发现的问题和解决的办法)
1)当用带输出参数的变量时,在执行excute时,要先declare 变量,才能执行。 2)第四题中
alter procedure proc_add @sc_sno varchar(10), @sc_cno varchar(10), @sc_cgrade smallint as begin
insert into sc// insert into sc(sno,cno,cgrade)都可以 values(@sc_sno,@sc_cno,@sc_cgrade); end