《数据库系统》实验报告
年级、专业、班级 实验题目 实验时间 2014-11-23 实验成绩 姓名 存储过程编程及触发器操作 实验地点 实验性质 A410 □验证性 □设计性 □综合性 教师评价: □算法/实验过程正确; □源程序/实验内容提交 □程序结构/实验步骤合理; □实验结果正确; □语法、语义正确; □报告规范; 其他: 评价教师签名: 一、实验目的 ? ? ? ? 了解触发器的基本概念 掌握触发器的创建、修改以及删除。 了解存储过程; 掌握存储过程的创建、修改以及删除。 二、实验项目内容 创建存储过程和更改存储过程; 创建触发器完成规定的操作; 掌握修改触发器的方法。 三、实验过程或算法(源程序) 1. 实现2个不含参数和2个含参数的存储过程 (1)实现不含参数的存储过程(一) create procedure search_all as select * from s (2)实现不含参数的存储过程(二) create procedure search_sname as select sname from s (3)实现含参数的存储过程(一) 报告创建时间:2014-11-29
create procedure search_sid @age varchar(10) as select s.sid from s where s.age=@age (3)实现含参数的存储过程(二) create procedure search_grade @sname varchar(20) as select sc.grade from sc where sc.sid=(select s.sid from s where s.sname=@sname) 2. 修改并实现其中一个的存储过程 alter procedure search_grade @sname varchar(20) as select sc.sid,sc.grade from sc where sc.sid=(select s.sid from s where s.sname=@sname) 3. 对pubs数据库,定义插入和更新时限制sales表中的ord_date必须晚于titles表中的pubdate的触发器。 create trigger trg_A on sales for insert,update as declare @ord_date datetime,@pubdate datetime select @ord_date=ord_date from inserted select @pubdate=pubdate from titles if @ord_date<@pubdate begin print 'ord_date不能早于pubdate' rollback end 4. 当在pubs数据库的sales表中插入一行数据时,在触发器中自动计算titles表中对应的(书号相同)的ytd_sales列的值(等于原ytd_sales列的值加上新插入数据的qty列的值),并保存新值。 create trigger trg_B on sales for insert as declare @title_id varchar(6),@qty smallint,@ytd_sales int select @title_id=title_id from inserted select @qty=qty from inserted select @ytd_sales=ytd_sales from titles begin update titles set ytd_sales=@ytd_sales+@qty where @title_id=titles.title_id end print '插入成功并已保存新值'
四、实验结果及分析和(或)源程序调试过程 1. 实验结果 (1)实现2个不含参数和2个含参数的存储过程,结果如下图: (2)修改并实现其中一个的存储过程,结果如下图: (3)对pubs数据库,定义插入和更新时限制sales表中的ord_date必须晚于titles表中的pubdate的触发器,结果如下图:
(4)当在pubs数据库的sales表中插入一行数据时,在触发器中自动计算titles表中对应的(书号相同)的ytd_sales列的值(等于原ytd_sales列的值加上新插入数据的qty列的值),并保存新值,结果如下图: 插入前ytd_sales的值为200,插入后为300,如下图: 2. 实验分析 此次实验我们通过创建存储过程和更改存储过程,基本了解了存储过程,掌握了存储过程的创建、修改以及删除等操作,另外,我们还创建触发器完成了规定的操作, 掌握了修改触发器的方法。