存储过程触发器和函数实验.docx
《存储过程触发器和函数实验.docx》由会员分享,可在线阅读,更多相关《存储过程触发器和函数实验.docx(13页珍藏版)》请在冰豆网上搜索。
存储过程触发器和函数实验
存储过程、触发器和用户自定义函数实验
实验容一
练习教材中存储过程、触发器和用户自定义函数的例子。
教材中的BookSales数据库,在群共享中,文件名为BookSales.bak。
实验容二
针对附件1中的教学活动数据库,完成下面的实验容。
1、存储过程
(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。
(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。
(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。
(4)创建一个存储过程,该存储过程有一个参数用来接收学生,该存储过程查询该学生的学号以及选修课程的门数。
(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。
2、触发器
(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。
(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。
(3)为course表创建一个INSERT触发器,要求插入的课程记录中任课教师不能为空。
3、用户自定义函数
(1)创建一个返回标量值的用户定义函数RectangleArea:
输入矩形的长和宽就能计算矩形的面积。
createfunctionRectangleArea(aint,bint)returnsint
as
begin
returna*b
end
(2)创建一个用户自定义函数,功能为产生一有关学生成绩统计的报表。
该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。
调用这个函数,生成相应的报表并给用户浏览。
createfunctionstudent_table()returnstable
as
return(
selectstudent_course.tcid课程号,ame课程名,COUNT(student_course.sno)选修人数,max(student_course.score)最高分,min(student_course.score)最低分,avg(student_course.score)平均分
fromstudent_course,course
wherestudent_course.tcid=o
groupbystudent_course.tcid,ame
)
实验数据库说明
教学活动数据库包括student、course和study三个基本表,三个基本表的结构说明和数据如下:
(1)学生表(student)
学生表的结构
列名
数据类型
长度
是否允许为空值
字段说明
sno
char
5
NO
学号
sname
char
8
NO
age
smallint
年龄
sex
nchar
1
性别
说明:
sno为主键,age的围为15~35之间,sex只能为“男”或“女”。
学生表的记录
sno
sname
age
sex
98601
强
20
男
98602
丽
21
女
98603
兵
20
男
98604
志坚
22
男
98605
王颖
21
女
(2)课程表(course)
课程表的结构
列名
数据类型
长度
是否允许为空值
说明
cno
char
4
NO
课程号
cname
char
20
NO
课程名
teacher
char
8
任课教师
说明:
cno为主键。
课程表的记录
cno
cname
teacher
C601
高等数学
周振兴
C602
数据结构
建平
C603
操作系统
建平
C604
编译原理
王志伟
(3)选课表(study)
选课表的结构
列名
数据类型
长度
是否允许为空值
说明
sno
char
5
NO
学号
cno
char
4
NO
课程号
score
smallint
成绩
说明:
sno和cno为主键,sno为外键(参照student表的sno),cno为外键(参照course表的cno),score的围为0~100之间。
选课表的记录
sno
cno
score
98601
C601
90
98601
C602
90
98601
C603
85
98601
C604
87
98602
C601
90
98603
C601
75
98603
C602
70
98603
C604
56
98604
C601
90
98604
C604
85
98605
C601
95
98605
C603
80