资源描述
北 华 航 天 工 业 学 院
《数据库系统管理》
实验报告
报 告 题 目 :
存储过程、触发器的创建于管理
所 在 系 部 : 计算机科学与工程系
所 在 专 业 : 网络工程专业
学 号 :
姓 名 :
教 师 姓 名 :
完 成 时 间 : 2011 年 10 月 19 日
北华航天工业学院教务处制
存储过程、触发器的创建与管理
一、 实验目的
1、 掌握存储过程的概念、优点、特点及用途;
2、 掌握创建、执行、查看、修改和删除存储过程的方法;
3、 了解触发器和一般存储过程的区别、概念及优点;
4、 掌握创建、查看、修改和删除触发器的方法。
二、 实验内容
(一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。
(二)练习创建和管理存储过程
1、使用管理控制台创建一个名为“计算机系借阅信息_PROC”的无参存储过程,要求显示计算机系读者2011-1-1以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段,并执行该存储过程,查看显示结果。
2、使用T-SQL语句创建一个名为“读者借阅信息_PROC”的带参数的存储过程,要求根据输入的读者的编号显示读者的所有借阅信息,包括“读者编号”、“姓名”、“系部”、“图书编号”、“图书名称”和“借阅日期”等字段,并执行该存储过程,查看显示结果。
create proc 读者借阅信息_PROC1
@dzbh char(10)
as
begin
select tb_reader.读者编号,姓名,系部,
tb_book.图书编号,书名,借阅日期
from tb_book,tb_reader,tb_borrow
where tb_book.图书编号=tb_borrow.图书编号
and tb_reader.读者编号=tb_borrow.读者编号
and tb_reader.读者编号=@dzbh
end
--
declare @srcs char(10),@fhzt int
set @srcs='R10009'
exec @fhzt=读者借阅信息_PROC1 @srcs
print '执行状态值为'+cast(@fhzt as varchar(10))
3、 使用T-SQL语句创建一个名为“图书借阅信息_PROC”的带参数的存储过程,要求根据输入的图书编号计算该图书的借阅数量,并根据程序执行结果返回不同的值,执行成功返回0,不成功返回错误号,并执行该存储过程,输出图书编号、借阅数量和程序结果返回值。
create proc 图书借阅信息_PROC1
@tsbh char(10),@jysl int output
as
begin
declare @ztz int
set @ztz=0
select @jysl=count(distinct 读者编号)
from tb_borrow where 图书编号=@tsbh
if @@error<>0
set @ztz=@@error
return @ztz
end
--
declare @sccs int,@fhz int,@srcs char(10)
set @srcs='10003'
exec @fhz=图书借阅信息_PROC1 @srcs,@sccs output
select @srcs,@sccs,@fhz
4、 使用管理控制台查看“读者借阅信息_PROC”存储过程的定义信息和依赖的对象。
5、 使用系统存储过程查看“计算机系借阅信息_PROC”存储过程的定义信息和依赖的对象。
sp_helptext
sp_depends
6、 使用T-SQL语句创建一个名为“删除读者信息_PROC”的存储过程,要求根据所提供的读者编号,删除该编号所对应的读者,如果不存在此编号的读者,则显示“该编号的读者不存在!”。创建完成之后,执行上述存储过程,观察执行结果。
create proc 删除读者信息_PROC1
@dzbh char(10)
as
begin
if exists(select * from tb_reader
where 读者编号=@dzbh)
begin
delete from tb_borrow where 读者编号=@dzbh
delete from tb_reader where 读者编号=@dzbh
end
else
print '该编号的读者不存在!'
end
exec 删除读者信息_PROC1 'R10010'
7、 使用T-SQL语句创建一个名为“修改借阅信息_PROC”的存储过程,要求根据所提供的读者编号和天数,将该读者的归还日期增加相应的天数,如果不存在该读者的借阅信息,则显示“该读者没有借阅图书!”。创建完成之后,执行上述存储过程,观察执行结果。
create proc 修改借阅信息_PROC1
@dzbh char(10),@ts int
as
begin
if exists(select * from tb_borrow
where 读者编号=@dzbh)
update tb_borrow
set 归还日期=dateadd(day,@ts,归还日期)
where 读者编号=@dzbh
else
print '该读者没有借阅图书!'
end
--
exec 修改借阅信息_PROC1 @ts=3,@dzbh='R10003'
8、 使用管理控制台删除“读者借阅信息_PROC”存储过程。
9、 使用T-SQL语言删除“计算机系借阅信息_PROC1”存储过程。
drop proc 计算机系借阅信息_PROC1
(三)练习创建和管理触发器
1、使用管理控制台创建一个名为“读者信息插入_TRIG”的触发器,要求在“读者信息表”表中插入一条新记录时触发该触发器,并给出“插入了一条新记录!”的提示信息。并在“读者信息表”中插入一条记录查看显示结果。
2、使用T-SQL语句创建一个名为“借阅信息插入修改_TRIG”的触发器,要求在“借阅信息表”中插入或修改记录时触发该触发器,检查“归还日期”是否超过2011年12月31日,如果超过给出相应提示,提示中给出“归还日期”超过2011年12月31日的“图书编号”和“读者编号”。
create trigger 借阅信息插入修改_TRIG
on tb_borrow
for insert,update
as
begin
declare @date datetime,@bookno char(10),@readerno char(10)
select @date=归还日期,@bookno=图书编号,@readerno 读者编号
from inserted
if @date>'2011-12-31'
begin
print 'date more than 2011-12-31'
select @bookno 图书编号,@readerno 读者编号
end
end
insert into tb_borrow values('10011','R10004','2011-11-4','2012-2-2')
3、使用T-SQL语句实现该数据库中各表间的级联删除。
4、使用T-SQL语句创建一个插入、更新类型的触发器“图书信息_TRIG”,当图书信息表中插入或修改记录时,触发该触发器,检查库存册数是否大于0,若小于0,则撤销插入和修改操作。
create trigger 图书信息_TRIG
on tb_book
for insert,update
as
begein
print 'begin trigger'
declare @kccs int
select @kccs=库存数from inserted
if @kccs<0
rollback
end
insert into tb_book values('11001',2,'eee','ddd','ggg',29,-1)
update tb_book set 库存数=-2 where 图书编号='10002'
5、使用管理控制台查看“读者信息插入_TRIG”触发器的依赖的对象。
6、使用系统存储过程查看“借阅信息插入修改_TRIG”触发器的定义信息和依赖的对象。
7、使用管理控制台删除“读者信息插入_TRIG”触发器。
8、使用T-SQL语言删除“借阅信息插入修改_TRIG”触发器。
drop trigger 借阅信息插入修改_TRIG
展开阅读全文