数据库第四次实验报告
时间:2020-11-21 09:50:45 来源:工作范文网 本文已影响 人
南昌航空大学实验报告
二0一 年 月 日
课程名称: 数据库概论 实验名称: 存储过程及触发器
班级: 姓名: 同组人:
指导教师评定: 签名:
实验参考代码及结果
存储过程:
创建存储过程
9.11
CREATE PROCEDURE Select_S AS SELECT * FROM S WHERE sex='女'
GO
Execute Select_S
9.12
CREATE PROCEDURE InsRecToS(@sno char(5),@sn varchar(8),@sex char(2)='男',@age int,@dept varchar(20))
AS INSERT INTO S VALUES(@sno,@sn,@sex,@age,@dept)
GO
Execute InsRecToS @sno='S8',@sn='罗兵',@age='18',@dept='信息'
执行前:
执行后:
9.13
CREATE PROCEDURE Query_S(@Sno char(5),@SN VARCHAR(8) OUTPUT,@Age SMALLINT OUTPUT)
AS
SELECT @sn=sn,@age=age
FROM S
WHERE Sno=@Sno
(2)执行存储过程
Declare @SN VARCHAR(8),@AGE SMALLINT
execute Query_S '98010',@SN OUTPUT,@AGE OUTPUT
SELECT @SN,@AGE
(3)查看和修改存储过程
9.14
ALTER PROCEDURE[dbo].[InsRecTos] (@sno char(5),@sn varchar(8),@sex char(2)='女',@age smallint,@dept varchar(20))
AS
INSERT
INTO S
VALUES(@sno,@sn,@sex,@age,@dept)
(4)查看、重命名和删除存储过程
9.15
exec sp_helptext Select_S
9.16
sp_rename Select_S,Select_Student
执行后:
9.17
DROP PROCEDURE Select_Student
执行后:
(5)在DingBao数据库中创建存储过程C_P_Proc,实现参数化查询顾客订阅信息,查询参数为顾客姓名,要求能查询出参数指定顾客的顾客编号、顾客名、订阅报纸名及订阅报纸份数等信息。
CREATE PROCEDURE C_P_Proc(@ccna varchar(10),@cno char(4) OUTPUT,@cna varchar(10) OUTPUT,@pna varchar(20) OUTPUT,@num int OUTPUT)
AS
SELECT @cna=cna,@cno=cp.cno,@pna=pna,@num=num
FROM cp,customer,paper
WHERE customer.cno=cp.cno AND paper.pno=cp.pno AND cna=@ccna;
(6)执行存储过程C_P_Proc,实现对“李涛”等不同顾客的订阅信息的查询。
Declare @cno char(4),@cna varchar(10),@pna varchar(20) ,@num int
execute C_P_Proc '李涛',@cno OUTPUT,@cna OUTPUT,@pna OUTPUT,@num OUTPUT
SELECT @cno,@cna,@pna,@num
(7)删除储过程C_P_Proc
DROP PROCEDURE C_P_Proc
执行前:
执行后:
触发器:
创建触发器
10.19
CREATE TRIGGER TR_S_Age_update on S
for update as
declare @iAge int;
select @iAge=age
from inserted
if @iAge<8 or @iAge>45
begin
raiserror('学生年龄应该大于等于,并小于等于',16,1)
rollback transaction
end
执行:
UPDATE s
SET age=48
WHERE sno='98010'
10.20
CREATE TRIGGER Change_S_Sel ON S
FOR INSERT,UPDATE,DELETE
AS
SELECT *
FROM S
执行:
(2)触发器的引用
INSERT
if exists(select name from sysobjects where name='TR_C_insert' and type='TR')
DROP TRIGGER TR_C_insert
go
CREATE TRIGGER TR_C_insert ON c
for insert as
declare @iCT int;
SELECT @iCT=CT
FROM inserted
if @iCT <1 or @iCT>10
begin
raiserror('课程学分应大于等于,小于等于.',16,1)
rollback transaction
end
执行:
INSERT
INTO c(cno,cn,ct)
VALUES ('C8','运筹学',0.5)
DELETE
CREATE TRIGGER TR_S_delete ON s
for delete
as
declare @icount int
select @icount=count(*)
from deleted,sc
where deleted.sno=sc.sno
if @icount>=1
begin
raiserror('该学生在表SC中北引用,展示不能被删除!',16,1)
rollback transaction
end
执行:
DELETE
FROM s
WHERE sno='98010'
(3)查看、修改和删除触发器
修改触发器
ALTER trigger [TR_S_Age_update]on[dbo].[s]
for update as
declare @iAge int;
select @iAge=age
from inserted
if @iAge<8 or @iAge>45
begin
raiserror('学生年龄应该大于等于,并小于等于',16,1)
rollback transaction
end
使用系统存储过程查看触发器
sp_depends 'Change_S_Sel'
sp_helptext 'Change_S_Sel'
Exec sp_help 'Change_S_Sel'
删除触发器
10.24
DROP TRIGGER TR_S_Age_update
执行前:
执行后:
(4)
1.
CREATE TRIGGER TR_PAPER_I ON paper
for insert as
declare @ippr money,@ipno char(6)
select @ippr=ppr,@ipno=pno
from inserted
if @ippr<0 or @ippr is NULL
begin
update paper
set ppr=10
where pno=@ipno
end
执行:
INSERT
INTO paper(pno,pna,ppr)
VALUES('000006','江西日报',-9)
2.
CREATE TRIGGER TR_PAPER_D ON paper
for delete
as
declare @ipno char(6)
select @ipno=cp.pno
from deleted,cp
where deleted.pno=cp.pno
begin
delete
from cp
where pno=@ipno
end
执行:
delete
from paper
where pno='000001'
3.
CREATE TRIGGER TR_PAPER_U ON paper
for update
as
declare @ippr money
select @ippr=ppr
from inserted
if @ippr<0 or @ippr is NULL
begin
raiserror('输入单价不正确!',16,1)
rollback transaction
end
执行:
UPDATE paper
SET ppr=-8
WHERE pno='000002'
5.
CREATE TRIGGER safety ON DATABASE
FOR ALTER_TABLE,DROP_TABLE
AS
PRINT'你必须失效DDL触发器"safety"后,才能删除或修改数据库表!'
ROLLBACK;
执行:
DROP TABLE cp
实验总结
通过本次实验,我基本了解掌握了存储过程及触发器的基本操作及相关语法。
- 下载文档
- 收藏
- 0