当前位置:文档之家› 11计科 张小华 数据库实验十一 存储过程与触发器

11计科 张小华 数据库实验十一 存储过程与触发器

西安思源学院数据库实验报告
实验名称:存储过程与触发器
班级:11计算机科学与技术学号:111102020104
姓名:张小华
指导教师:王英强
实验时间:2013年5月
成绩:
实验11存储过程与触发器
1.实验目的
(1)掌握创建存储过程和触发器的方法和步骤。

(2)掌握存储过程和触发器的使用方法。

2.实验准备
(1)了解存储过程和触发器的基本概念和类型。

(2)了解创建存储过程和触发器的SQL语句的基本用法。

(3)了解查看、执行、修改和删除存储过程的SQL语句的用法。

(4)了解查看、修改和删除触发器的SQL语句的用法。

3.实验内容
(1)使用存储过程:
①使用student数据库中的“学生”、“课程注册”、“课程”、表创建一个不带参数的存储过程(kcxd)。

该存储过程的功能是:显示所有学生的学号、选修的课程名和课程成绩。

.执行kcxd存储过程,显示所有学生的学号、选修课程和课程成绩。

源代码:
use student
go
create proc kcxd
as
select学生.姓名,学生.学号,课程名,成绩
from学生,课程注册,课程
where学生.学号=课程注册.学号and课程.课程号=课程注册.课程号
go
执行kcxd代码:
use student
go
exec kcxd
go
②使用student数据库中的“学生”、“课程注册”、“课程”、表创建一个不带参数的存储过程(cjxc)。

该存储过程的功能是:当任意给定一个学生的姓名时,将显示该学生的学号,选修的课程名和课程成绩,若没有给定学生的姓名,则显示所有学生的学号、选修的课程名和课程成绩。

.执行cjcx存储过程,查询“周红梅”的学号、选修课程和课程成绩。

.执行cjcx存储过程,不指定参数值。

.使用系统存储过程sp_helptxt查看存储过程cjcx的文本信息。

源代码:
use student
go
create proc cjkx
@student_name char(10)
as
if @student_name=''
begin
select学生.姓名,学生.学号,课程名,成绩
from学生,课程注册,课程
where学生.学号=课程注册.学号and
课程.课程号=课程注册.课程号
end
else
begin
select学生.姓名,学生.学号,课程名,成绩
from学生,课程注册,课程
where学生.学号=课程注册.学号and
课程.课程号=课程注册.课程号
and学生.姓名=@student_name
end
go
执行cjcx存储过程,查询“周红梅”的学号、选修课程和课程成绩代码如下:
use student
go
exec cjkx '周红瑜'
go
执行cjcx存储过程,不指定参数值
代码如下:
use student
go
exec cjkx ''
go
使用系统存储过程sp_helptxt查看存储过程cjcx的文本信息代码如下:
use student
go
exec sp_helptext cjkx
go
③使用student数据库中的“教师”、“教师任课”表创建一个带参数的存储过程(jsrk)。

该存储过程的功能是:当任意输入一个教师的姓名时,将由输出参数返回该教师的任课数量。

. 执行jsrk存储过程,查询“张斌”的任课数。

创建存储过程jsrk:
use student
go
create proc jsrk
@js_name varchar(20)
as
select count(课程号)as该教师任课数量
from教师,教师任课
where教师.姓名=@js_name and
教师.教师编号=教师任课.教师编号
go
执行jsrk存储过程,查询“张斌”的任课数
代码如下:
use student
go
exec jsrk '张斌'
go
(2)使用触发器:
①在jifei数据库中建立一个名为insert_sjkh的INSERT触发器,存储在“上
机记录”表中。

该触发器的作用是:当用户向“上机记录”表中插入记录时,如果插入了“上机卡”表中没有的上机号,则提示用户不能插入记录,否则提示记录插入成功。

创建代码:
use jifei
go
create trigger insert_sjkh
on上机记录
for insert
as
if(select上机卡.上机号from上机卡,inserted
where上机卡.上机号=inserted.上机号)>0
begin
print'记录插入成功';
end
else print'用户不能插入记录!';
rollback transaction--回滚﹐避免加入
go
在jifei数据库中建立一个名为dele_sjh的DELETE触发器,该触发器的作用是在删除“上机卡”表中记录的同时自动删除“上机记录”表中的相应上机号的上机记录。

创建代码:
use jifei
go
create trigger dele_sjh
on上机卡
for delete
as
delete上机记录where上机号
in(select上机号from deleted)
go
②在jifei数据库中建立一个名为update_sjh的UPDATE触发器,该触发器的
作用是禁止更新“上机卡”表中的上机号的内容。

创建代码:
use jifei
go
create trigger update_sjh
on上机卡
for update
as
if update(上机号)
begin
print'该信息不可随便改动!'
rollback transaction
end
go
③在jifei数据库中建立一个名为update_sjye的UPDATE触发器,该触发器的
作用是当上机记录表中的上机状态由True变为False时,自动修改上机卡表的相应上机卡的余额,修改方法为:原有余额-(上机时间*机时单价)(机时单价以1.00元/小时计)。

(选作)
④删除以上建立的所有触发器。

选中要删除的触发器→右键单击→选择删除→点击确定。

相关主题