数据库技术与应用实验五视图存储过程和触发器.docx
《数据库技术与应用实验五视图存储过程和触发器.docx》由会员分享,可在线阅读,更多相关《数据库技术与应用实验五视图存储过程和触发器.docx(7页珍藏版)》请在三一文库上搜索。
1、/* 实验五 视图、存储过程和触发器 */-1. 定义视图并在视图上完成数据查询功能-(1) 在UNIVERSITY数据库上创建视图ViewA,完成“查询有选课记录的学生学号、课程号、课程名称、成绩”的数据搜索功能。CREATE VIEW ViewAAS SELECT snum 学号, um 课程号, cname 课程名称, score 成绩FROM sc JOIN sections ON sc.secnum =sections.secnum JOIN course ON um=um-(2) 在上述视图的基础上完成查询:查询所有学生都及格的课程名称SELECT 课程名称 FROM ViewA
2、GROUP BY 课程名称HAVING MIN(成绩)=60-2. 存储过程的建立和执行-(1)建立存储过程ProcA,其功能为显示所有学生的基本信息;CREATE PROC ProcAAS SELECT *FROM student-执行ProcAEXEC ProcA -(2)建立存储过程ProcB,其功能是查询出给定出生年份信息(已知出生日期的前四位信息)的学生信息。CREATE PROC ProcB_year char(4)ASSELECT *FROM studentWHERE year(birthday)=_year-执行ProcBDECLARE year char(4)SET year
3、1994EXEC ProcB year-(3)建立存储过程ProcC,其功能是查询给定学号的学生的课程平均成绩、选修课程的门数和不及格课程门数CREATE PROC ProcC_snum char(4),_avg int out,_selected_course int out,_failed_course int outASSELECT _avg=AVG(score),_selected_course=COUNT(cnum),_failed_course=sum(1-score/60)FROM sc JOIN sections ON sc.secnum =sections.secnum W
4、HERE snum=_snum-执行ProcCDECLARE snum char(4),avg int,selectedCourse int,failedCourse intSET snum=s001EXEC ProcC snum,avg out,selectedCourse out,failedCourse outPRINT snum + 学生的平均成绩 + cast(avg as char(2) + ,选课门数: + cast(selectedCourse as char(2) + ,不及格门数: + cast(failedCourse as char(2)-3.建立一组触发器,并设计一组
5、必要的数据操作验证触发器的功能-(1)自定义一个触发器TA,完成选课表SC属性snum的参照完整性控制。CREATE TRIGGER TA ON SCFOR INSERT,UPDATEASDECLARE _snum char(4)SELECT _snum=inserted.snum FROM inserted IF not EXISTS(SELECT * FROM Student WHERE student.snum = _snum) BEGIN RAISERROR(违反参照完整性约束!操作回滚!,1,1,error) ROLLBACK ENDELSE PRINT 操作成功执行! -测试触发器
6、前,应将上关于的外键删除-测试用例一,插入的学号不存在 INSERT INTO SC VALUES(S009,11601,89)-测试用例二,更新的学号不存在UPDATE SC SET snum=s101 where snum=s001 and secnum=11601-测试用例三,插入学号和课程号都存在INSERT INTO SC VALUES(S005,12601,87) -测试用例四,更新的学号存在UPDATE SC SET snum=s007 where snum=s005 and secnum=12601-(2)自定义一个触发器TB,完成学生表student的完整性约束。- 具体要求
7、如果年龄超出1435岁,则报“年龄越界!”错误提示信息,否则显示“数据录入成功!”CREATE TRIGGER TB ON studentFOR INSERT,UPDATEASDECLARE _age intSELECT _age = DATEDIFF(YEAR,birthday,GETDATE() FROM inserted IF _age 35 BEGIN RAISERROR(年龄越界!,13,1,error) ROLLBACK ENDELSE PRINT 数据录入成功! -测试用例一,插入1920-1-1(年龄越界)出生的一个新记录 INSERT INTO student VALUES
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库技术 应用 实验 视图 存储 过程 触发器
