一、实验目的
1. 掌握存储过程的概念,熟悉使用存储过程来进行数据库应用程序的设计。
2. 掌握存储过程的创建、使用和删除。
二、实验内容及要求
本实验使用数据库为SCHOOL数据库。
1.创建一个存储过程Proc_Course,查看“0108”号课程的选修情况,包括学生学号、姓名和成绩,然后执行该过程;
创建:
create procedure proc_course
as
select student.stu_id,stu_name,grade
from student join studentgrade on student.stu_id=studentgrade.stu_id
where course_id='0108'
执行:
execute proc_course
2.创建一个存储过程Proc_SC1,通过学生学号来查询学生选修情况,默认查询学号为“000503003”的选修情况,包括学生学号、课程名、姓名和成绩。
create procedure Proc_SC1
as
select StudentGrade.Stu_id,Course_name,Stu_name,Grade
from Student,StudentGrade,Course
where StudentGrade.Stu_id=Student.Stu_id and Student.Stu_id=‘000503002’
and Course.Course_id=StudentGrade.Course_id
execute Proc_SC1
结果如下,刚开始展现第一张图片,然后跳到第二张图片
3.修改上面的存储过程,并调用修改后的存储过程,求出学号为“000503002”学生的不及格课程的信息。
alter procedure Proc_SC1
as
select StudentGrade.Stu_id,Course_name,Stu_name,Grade
from Student,StudentGrade,Course
where StudentGrade.Stu_id=Student.Stu_id and Student.Stu_id='000503002'
and Course.Course_id=StudentGrade.Course_id
and Grade<60
execute Proc_SC
4.编写存储过程Proc_jiecheng,求n!。并调用上面的存储过程,求5!。
create proc proc_jiecheng
@n int --此处声明的为输入输出参数
as
declare @i int --此处声明的为存储过程内部使用的变量
declare @sum bigint
set @i=1
set @sum=1
while @i<=@n
begin
set @sum=@sum*@i
set @i=@i+1
end
print @sum
exec proc_jiecheng 5
5.删除存储过程Proc_jiecheng。
drop procedure Proc_jiecheng
6.定义一函数(即存储过程),函数的自变量是学生的姓名(即输入参数),函数值是这个学生的总成绩。
用(1)(2)2种方法分别完成,分别调用。对比区别
(1)要求用输出参数输出学生的总成绩(输出参数是这个学生的总成绩)。
create proc proc_Stu1
@stuname varchar(5),
@stugrade Smallint output
as
select @stugrade=sum(Grade)
from Student,StudentGrade
where Student.Stu_id=StudentGrade.Stu_id and Stu_name=@stuname
declare @g Smallint --定义一个变量接收@stugrade的数据
exec proc_Stu1 '陈培军',@g output
打印不出成绩,已经验证Student表中含有陈培军
(2)不用输出参数的方法完成,在存储过程内部用print。
create proc proc_Stu2
@stuname varchar(5)
as
declare @stugrade Smallint
select @stugrade=sum(Grade)
from Student,StudentGrade
where Student.Stu_id=StudentGrade.Stu_id and Stu_name=@stuname
print @stugrade
exec proc_Stu2 '陈培军'
也打印不出成绩