数据库系统概论王珊第五版学习笔记 下载本文

类似与C语言中的函数。

编写一个存储过程,在sc表统计每个学生的平均分.

create proc avergrade as begin

//创建存储过程

select sno,avg(grade) 平均分 from sc group by sno end

exec avergrade

drop procedure avergrade

//执行存储过程

//删除存储过程

对练习1的存储过程进行改进,添加一个输入参数——学号,使存储过程能根据输入的学号计算该学生的平均分

create proc avergrade @sno char(10) as begin

select sno,avg(grade) 平均分 from sc

where sno = @sno group by sno end

exec avergrade '04'

drop procedure avergrade

在练习2的基础上添加一个输出参数——平均分,计算指定学号的平均分,然后将平均分输出。

create proc avergrade @sno char(10), @saving int out as begin

select @saving = avg(grade) from sc

where sno = @sno group by sno end

declare @avg int set @avg = 0

exec avergrade '02',@avg out select @avg 平均分

drop procedure avergrade

3.函数。

函数必须返回指定类型,可以返回表,有输入参数。

创建成绩转换函数,实现百分制成绩与优、良、中、及格、不及格五个等级的换算.

CREATE FUNCTION grade_trans(@grade FLOAT) RETURNS CHAR(16) AS BEGIN

DECLARE @class CHAR(16) SELECT @class = CASE

WHEN @grade IS NULL THEN '还没参加考试' WHEN @grade < 60 THEN '不及格'

WHEN @grade >= 60 and @grade < 70 THEN '及格' WHEN @grade >= 70 and @grade < 80 THEN '中等' WHEN @grade >= 80 and @grade < 90 THEN '良好' ELSE '优秀!' END

RETURN(@class) END

select dbo.grade_trans(88)

查询某个院系所有学生所选的每门课的平均成绩。

create function aver (@p char(10)) returns table as return (

select cno 课程号,avg(grade) 平均成绩

from student,sc

where student.sno=sc.sno and sdept=@p

group by cno )

select * from dbo.aver('cs')

drop function aver

求某个院系选修了某门课的学生人数。

create function people(@p0 char(10),@p1 char(4)) returns int as begin

declare @renshu int select @renshu = ( )

return @renshu

select COUNT(*) 选课人数 from student,sc

where student.sno = sc.sno and cno = @p1 and sdept = @p0

end

select dbo.people('cs','2')