数据库实验报告 8.docx
《数据库实验报告 8.docx》由会员分享,可在线阅读,更多相关《数据库实验报告 8.docx(12页珍藏版)》请在冰豆网上搜索。
数据库实验报告8
数据库系统及应用
实验报告
实验名称:
存储过程与触发器
实验地点:
11教407
专业班级:
学生姓名
学生学号:
指导教师:
成 绩:
2012年11 月20 日
一、实验目的
1.掌握SQL存储过程的建立、修改、删除的基本方法;
2.掌握SQL触发器的建立、修改、删除的基本方法及触发器的类型;
3.了解存储过程和触发器的各自作用;
4.掌握用户自定义函数的创建与调用。
二、实验内容及步骤
1.使用SQL语句创建一个存储过程,要求根据男女生人数来输出不同的信息。
如果男生人数大于女生,输出“男比女多”,否则输出“女比男多”。
createprocproc1as
declare@男生人数int,@女生人数int
select@男生人数=count(*)fromstudentwhere性别='男'
select@女生人数=count(*)fromstudentwhere性别='女'
if@男生人数>@女生人数
print'男比女多'
else
print'女比男多'
2、执行该存储过程,观察结果。
execproc1
(3)创建存储过程proc_cjcx,根据输入的课程名称查询该课程的平均成绩、最高分和最低分。
createprocproc_cjcx(@课程名称varchar(50))as
selectavg(成绩)平均成绩,sum(成绩)总成绩,max(成绩)最高分,min(成绩)最低分fromscoreinnerjoincourseonscore.课程编号=course.课程编号where课程名称=@课程名称
4.在查询分析器中执行存储过程proc_cjcx,查询“管理学”课程的信息。
execproc_cjcx@课程名称='管理学'
2.删除步骤1创建的存储过程。
dropprocedureproc1
6.为student创建一个触发器trig_up。
要求:
若向表student中插入或修改记录时,限制其入学成绩不能低于400分,否则不允许操作。
CREATEtriggertrig_uponstudentFORINSERT,UPDATE
AS
ifexists(select*frominsertedwhere入学成绩<400)
begin
print'入学成绩小于400'
rollback
end
7.在查询分析器中执行命令“insertstudent(学号,姓名,性别,出生日期,入学成绩,党员否,班级编号)values(‘2006091030’,‘张大民’,‘男’,1987-1-1,389,0,‘200602’)”,观察结果。
insertstudent(学号,姓名,性别,出生日期,入学成绩,党员否,班级编号)values('2006091030','张大民','男',1987-1-1,389,0,'200602')
8.在查询分析器中执行命令updatestudentset入学成绩=390where姓名=‘张楚’,观察结果。
updatestudentset入学成绩=390where姓名='张楚'
9.为表student创建一个触发器trig_del,要求不允许从表student中删除党员记录。
createtriggertrig_delonstudentFORdelete
AS
ifexists(select*fromdeletedwhere党员否=1)
begin
print'不能删除党员的记录'
rollback
end
10.在查询分析器中执行命令“deletefromstudentwhere姓名=‘孙晓楠’”,观察结果。
deletefromstudentwhere姓名='孙晓楠'
11.建立一个用户自定义函数并调用,要求根据课程编号来查询课程名称,调用时课程编号可取04010101。
createfunction根据课程编号查课程名称(@kchchar(8))
returnschar(40)as
begin
declare@kcmchar(40)
select@kcm=课程名称fromcoursewherecourse.课程编号=@kch
return(@kcm)
end
三、实验总结
1.什么是存储过程?
什么是触发器?
二者有什么区别?
2.触发器有哪些类型,各有什么特点?
(1)存储过程:
是指编译之后可以以一种可执行的形式永久地存储在数据库中的SQL语句。
它是一些数据库开发商对标准SQL语言开发的扩展版本中新增加的数据库对象。
触发器:
是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效。
区别:
存储过程的SQL语句任何时候都可以执行,不需要重新编译。
触发器主要用于强制复杂的业务规则或要求。
(2)类型:
AFTER触发器和INSTEADOF触发器
特点:
AFTER触发器要求只有执行某一操作(INSERTUPDATEDELETE)之后,触发器才被触发,且只能在表上定义。
可以为针对表的同一操作定义多个触发器。
对于AFTER触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder来完成此任务。
INSTEADOF触发器并不执行其所定义的操作(INSERT、UPDATE、DELETE),而仅是执行触发器本身。
既可在表上定义INSTEADOF触发器,也可以在视图上定义INSTEADOF触发器,但对同一操作只能定义一个INSTEADOF触发器。