同济大学
《数据库技术及应用》
实验报告
实验报告题目:
视图,存储过程和触发器
姓名: 学号: 年级: 专业: 指导教师: 日期: 2014 年 10 月 27 日
一. 实验目的
1. 学会视图的建立和基于视图的数据库建立 2. 学会存储过程的建立和存储方法
3. 学会触发器的建立和使用方法,通过实验数据的操作过程了解应
用触发器实现数据库完整性控制的设计过程 二. 实验内容
(实验题目+运行界面截图+实现代码)
1.(1)创建视图viewa,查询有选课记录的学生号,课程号,课程名称。成绩。
create view viewA as
select student.snum,sc.secnum,course.cname,sc.score from student,sc,sections ,course
where student.snum=sc.snum and sc.secnum =sections.secnum and sections.cnum=course.cnum
(2)在上述视图的基础上查询所有学生都及格的课程名称
select cname from viewA group by cname having min(score)>60
2.存储过程的建立和执行
(1)建立存储过程proca,其功能是显示所有学生的基本信息
create proc proca as select * from student
exec proca
(2)建立procb,查询出给定出生年份信息的学生信息
create proc procb @_year int as
select * from student where year(birthday)=@_year
declare @y int set @y=1994 exec procb @y
(3)建立存储过程procc,查询给定学好的学生的课程平均成绩,选修课程的门数和不及格课程的门数
create proc procc @_xh char(4) as
select avg(score) as '平均成绩',count(1-score/60) as '不及格课程门数',count(score) as '选修课程门数' from sc
where snum=@_xh
declare @xh1 char(4) set @xh1='s007' exec procc @xh1
3.建立一组触发器,并设计一组必要的数据操作验证其功能 (1)自定义一个触发器ta,完成选课表sc属性snum参照完整性控制
create trigger xhys on sc for insert,update as begin
if((select snum from inserted ins) not in (select snum from student)) begin
print'违反参照完整规则' rollback end end
(2)自定义tb,完成student的完整性约束,具体要求是如果年龄超出14-35岁,则报“年龄越界”否则显示数据录入成功
CREATE TRIGGER T_age_student ON student FOR INSERT AS
DECLARE @_snum AS CHAR(4)
SELECT @_snum=i.snum FROM inserted I DECLARE @age AS INTEGER
SELECT @age=year(getdate()-year(birthday)) FROM student WHERE snum=@_snum IF @age>=14 and @age<=35