实验六 存储过程和触发器

合集下载

实验六存储过程和触发器

实验六存储过程和触发器

实验六存储过程和触发器实验六存储过程和触发器(2学时)1.实验目的(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。

(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。

(3)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。

(4)掌握引发触发器的方法。

(5)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。

2.实验内容(1)输入以下T-SQL代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。

CREATE PROCEDURE letters_printASDECLARE @count intSET @count=0WHILE @count<26BEGINPRINT CHAR(ASCII('a')+ @count)SET @count=@count +1END使用EXECUTE命令执行letters_print存储过程。

(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。

CREATE PROCEDURE stu_info @name varchar(40)ASSELECT a.no,name,cno,gradeFROM Student a INNER JOIN grade bON a.no= b.snoWHERE name= @name使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。

如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义?(3)使用student_db数据库中的Student表、course表、grade表。

存储过程及触发器实验报告

存储过程及触发器实验报告

存储过程及触发器实验报告实验目的:1、了解存储过程及其应用;2、了解触发器及其应用;3、掌握使用存储过程及触发器完成数据操作的方法。

实验过程:1、存储过程存储过程是指一组为了完成特定功能的SQL语句集合。

存储过程可以接收传入参数并返回处理结果。

存储过程的好处是可以减少网络流量,提高性能,增加安全性。

在本次实验中,我们将学习如何创建存储过程。

首先,在MySQL中打开MySQL Workbench,进入我们的实验数据库。

然后我们就可以创建一个存储过程了。

创建存储过程的语法如下:CREATE PROCEDURE procedure_name ()BEGIN-- SQL statementsEND;在这个语法中,procedure_name是我们想要创建的存储过程的名称。

在BEGIN和END 之间,我们可以输入一组SQL语句,这些语句将组成存储过程的主体内容。

我们可以以一个创建一个简单的存储过程作为例子,这个存储过程的作用是输出一条信息。

我们将这个存储过程命名为print_message。

在上面的语句中,我们定义了一个存储过程,它被命名为print_message。

它只包含一条SELECT语句,这条语句将输出Hello, World!这个字符串。

创建完存储过程之后,我们可以通过CALL语句来调用它:CALL print_message();执行这个语句后,我们将会看到Hello, World!这个字符串输出到屏幕上。

2、触发器触发器是一种被动的对象,它是由数据库管理系统在数据表上自动执行的一些操作。

当数据表中发生某些指定的操作时,触发器就会被调用执行。

触发器通常用于数据表中的数据变更操作,比如插入、更新和删除。

在本次实验中,我们将学习如何创建和使用触发器。

在MySQL中创建触发器的语法如下:CREATE TRIGGER trigger_name{BEFORE | AFTER} trigger_event ON table_nameFOR EACH ROW trigger_body;在这个语法中,trigger_name是我们想要创建的触发器的名称。

实验6:存储过程和触发器

实验6:存储过程和触发器

序号:云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2015-2016学年第二学期任课教师:专业:学号:姓名:成绩:实验6 存储过程和触发器存储过程1、使用不带参数的存储过程(1)创建一个存储过程my_proc,查询“学生表”中所有计算机系女生的学号、姓名、性别、年龄和所在院系(2)执行存储过程2、带输入参数的存储过程(1)创建一个存储过程my_procsex,使其能够查询“学生表”中男学生或女学生(输入参数从这考虑)的学号、姓名、性别、年龄和所在院系(2)执行存储过程3、带输入/输出参数的存储过程(1)创建一个存储过程my_procage,使其能够根据学生姓名(输入),查询学生年龄(输出)。

(考虑当学生不存在时给出提示信息)(2)执行存储过程4、返回状态值的存储过程(1)创建一个存储过程my_procstatus,使其能够根据学生姓名,查询学生的选课信息。

(如果没有输入学生姓名,返回状态码55;如果输入的学生姓名不存在,则返回状态码-155)(2)执行存储过程:接收存储过程返回的状态码,如果返回的状态码为55则输出提示信息“没有输入名字!!”;如果返回的状态码为-155,则输出“没找到!!”。

(3)删除存储过程触发器1、使用触发器(1)创建一个触发器trig_update,返回对“学生表”进行更新操作后,被更新的记录条数(2)执行触发器(3)修改触发器trig_update,除返回被更新的记录条数外,再返回学生的所有基本信息2、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted)。

(1)在“学生表”上创建触发器ins_del_sample,在对学生表进行插入、删除或更新操作后,分别从inserted表和deleted表中查询学生学号、姓名、性别、年龄和所在院系。

(请同学们在做删除操作时,注意备份)(2)执行插入、删除和更新操作后返回的表有什么区别?3、使用系统存储过程查看触发器(1)显示触发器trig_update的一般信息(2)显示触发器trig_update的源代码(3)显示“学生表”上所有的依赖关系(4)显示触发器trig_update所引用的对象4、难题(注意inserted表和deleted表的使用,并请自己修改数据表)(1)为“成绩表”创建一个触发器,当向表中插入数据时,如果成绩大于等于60分,该学生就能得到相应的学分,否则,该学生不能得到学分。

实验六-存储过程与触发器

实验六-存储过程与触发器

实验六存储过程和触发器1.实验目的(1) 掌握存储过程和触发器的基本概念和功能(2) 掌握创建,管理存储过程的方法(3) 掌握创建,管理触发器的方法2.实验内容及步骤(1) 利用SQL Server Management Studio创建一个存储过程ProcNum,查询每个班级中学生的人数,按班级号升序排序.在查询编辑器的存储过程模板中输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcNum ASSELECT classno,COUNT(*)AS number FROM studentGROUP BY classno ORDER BY classno ASCGOEXEC ProcNum(2) 利用Transact-SQL语句创建一个带有参数的存储过程ProcInsert,向score 表插入一条选课记录,并查询该学生的姓名,选课的所有课程名称,平时成绩和期末成绩.<1> 在查询编辑器输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))ASINSERT INTO score VALUES (@sno,@cno,@usually,@final)SELECT sname,cname,usually,finalFROM student s,course c,score scWHERE s.studentno=sc.studentno and c.courseno=sc.courseno and s.studentno=@sno<2> 调用存储过程ProcInsert,向score表插入一条选课记录.DECLARE@AVERAGE NUMERIC(6,2)EXEC ProcInsert'16135222201','c05103',88,90(3) 利用Transact-SQL语句创建一个存储过程ProcAvg,查询指定班级指定课程的平均分。

存储过程与触发器实验报告

存储过程与触发器实验报告

存储过程与触发器实验报告一、引言存储过程和触发器是数据库中常用的高级功能,它们能够提高数据库的性能、数据一致性和安全性。

本实验报告将详细介绍存储过程和触发器的概念、用途以及实际应用。

二、存储过程2.1 概念存储过程是一组预定义的SQL语句集合,它们被命名并存储在数据库中,可以作为一个单元来调用和执行。

存储过程可以接受参数,并返回一个或多个结果集。

存储过程可以在应用程序层面减少网络传输,提高数据库性能。

2.2 用途存储过程的应用非常广泛,主要用于以下几个方面: 1. 数据库业务逻辑封装:将复杂的业务逻辑封装到存储过程中,使应用程序只需调用存储过程而不需要编写大量的SQL语句,简化应用程序的开发。

2. 数据库性能优化:通过存储过程可以减少网络传输,提高数据库性能。

3. 数据库安全性:通过存储过程,可以实现对数据库的访问权限控制,提高数据库的安全性。

2.3 示例下面以一个简单的示例来说明存储过程的使用。

2.3.1 创建存储过程CREATE PROCEDURE `get_employee_by_department` (IN department_id INT)BEGINSELECT * FROM employee WHERE department_id = department_id;END2.3.2 调用存储过程CALL `get_employee_by_department`(1);2.4 优化技巧为了进一步提高存储过程的性能,可以采用以下优化技巧: 1. 减少存储过程的参数:过多的参数会增加网络传输的负担,应尽量减少存储过程的参数数量。

2. 避免长时间占用资源:存储过程应尽量快速执行,避免长时间占用数据库资源。

三、触发器3.1 概念触发器是与表相关联的特殊类型的存储过程,它在表的数据发生变化时自动执行。

触发器可以监视INSERT、UPDATE或DELETE等操作,并在这些操作发生时自动触发执行一段预定义的代码。

实验教案—实验六(存储过程和触发器)(2005)

实验教案—实验六(存储过程和触发器)(2005)
[2]《数据库系统与应用》,赵致格,清华大学出版社,2005
[3]《SQL SEVER数据库原理及应用》,张莉,清华大学出版社,2005
下次实验内容
存储过程的建立、修改和执行,触发器的建立和修改,设计一组操作触发触发器的执行
在A中,提交事务
在A,B窗口分别察看customerid = 'ANTON’的记录,结果如何,为什么?
3、锁的模拟
启动两个查询分析器,分别叫(A,B)
在A中,显式启动事务,察看customerid = 'ANTON'的记录
在B中,显式启动事务,察看customerid = 'ANTON'的记录
在B中,将customerid = 'ANTON’地址更新为’AAAAAA’
1).通过试验,加深学生对事务的基本概念理解语掌握;
2).通过试验,加深学生对并发控制的基本概念理解,认识不正确的并发控制所带来的危害;
3).通过试验,加深学生对锁的基本概念的掌握与理解,认识锁带来的问题;
二、实验环境
硬件:奔腾4处理器,1.8GHz,512M内存
操作系统软件:WindowsXP
数据库系统:SQLServer 2000桌面版
(3)对视图的操作
2、难点:
设计一系列操作触发触发器的执行。
四、仪器设备及用具
硬件:每位同学分配PC机一台
软件:windows环境安装好SQL Server
五、教学过程
(一)实验预习
(1)熟悉SQL中的创建存储过程和触发器的SQL语句
(2)准备好实验所用的数据库及原始数据
(二)实验原理
在查询分析器下利用SQL命令完成对所要求的存储过程的创建和执行,完成触发器的执行和设计相应操作触发触发器的执行。

实验六 触发器实验报告

实验六 触发器实验报告

实验六触发器实验报告一、实验目的本次实验的主要目的是深入理解触发器的工作原理和应用,通过实际操作和观察,掌握触发器在数字电路中的功能和特性。

二、实验原理触发器是一种具有记忆功能的基本逻辑单元,能够存储一位二进制信息。

常见的触发器类型有 SR 触发器、JK 触发器、D 触发器和 T 触发器等。

以 D 触发器为例,其工作原理是在时钟脉冲的上升沿或下降沿,将输入数据D 传递到输出端Q。

在没有时钟脉冲时,输出状态保持不变。

三、实验设备与材料1、数字电路实验箱2、 74LS74 双 D 触发器芯片3、示波器4、导线若干四、实验内容与步骤1、用 74LS74 芯片搭建 D 触发器电路将芯片插入实验箱的插座中,按照芯片引脚功能连接电源、地和输入输出引脚。

使用导线将 D 输入端连接到逻辑电平开关,将时钟输入端连接到脉冲信号源,将 Q 和 Q'输出端连接到发光二极管或逻辑电平指示器。

2、测试 D 触发器的功能置 D 输入端为高电平(1),观察在时钟脉冲作用下 Q 输出端的变化。

置 D 输入端为低电平(0),再次观察时钟脉冲作用下 Q 输出端的变化。

3、观察 D 触发器的异步置位和复位功能将异步置位端(PRE)和异步复位端(CLR)分别连接到逻辑电平开关,测试在置位和复位信号作用下触发器的状态。

4、用示波器观察时钟脉冲和 Q 输出端的波形将示波器的探头分别连接到时钟脉冲输入端和 Q 输出端,调整示波器的设置,观察并记录波形。

五、实验结果与分析1、在 D 输入端为高电平时,每当时钟脉冲的上升沿到来,Q 输出端变为高电平;在D 输入端为低电平时,每当时钟脉冲的上升沿到来,Q 输出端变为低电平,验证了 D 触发器的正常功能。

2、当异步置位端(PRE)为低电平时,无论其他输入如何,Q 输出端立即变为高电平;当异步复位端(CLR)为低电平时,Q 输出端立即变为低电平,表明异步置位和复位功能有效。

3、从示波器观察到的波形可以清晰地看到时钟脉冲与 Q 输出端的关系,进一步验证了触发器的工作特性。

存储过程和触发器实验报告

存储过程和触发器实验报告

数据库技术与应用实验报告七班级:机械因材学号: 16 姓名:高永吉一:实验名称:存储过程及触发器二.实验目的:⑴使用系统常用的存储过程;⑵掌握存储过程的创建及应用(3) 理解触发器的概念;(4) 掌握触发器的创建及应用。

三.实验内容、过程和结果:存储过程1创建一个存储过程.查看学号为1(根据实际情况取)的学生的信息.包括该学生的学号.班级编号.姓名。

(提示:查询涉及到表Student)2执行1中创建的存储过程。

3使用输入参数创建题1中的存储过程。

题1中所创建的存储过程只能学号为1的学生信息进行查看.要想对其他学生进行查看.需要进行参数传递。

4执行3中创建的存储过程.(1)按位置传递参数;(2)通过参数名传递参数;5触发器1)在课程表Course上创建一个触发器.该触发器被操作DELETE所触发.且要求触发触发器的DELETE语句在执行被取消。

2)在表Student中建立插入触发器, 插入一条记录时.若年龄>100或者年龄<=0,拒绝插入记录并显示:“年龄不符合规定.无法插入此记录!”;3)创建一个触发器.如果在Student表中添加或更改数据.向客户端显示一条消息“你正在插入或修改学生表的数据”.要求触发触发器的DELETE、UPDATE语句被执行。

4 )为Course表创建一个名称为my_trig的触发器.当用户成功删除该表中的一条或多条记录时.触发器自动删除Student表中与之有关的记录。

5 )使用系统存储过程查看创建的触发器。

图一:创建一个存储过程.查看Tno为1(根据实际情况取)的教师的信息.包括该教师的姓名.sal图二执行1中创建的存储过程。

图三使用输入参数创建题1中的存储过程。

图四执行3中创建的存储过程.(按位置传递参数)图五执行3中创建的存储过程通过参数名传递参数;图六使用系统存储过程查看3中创建的存储过程图七删除3中创建的存储过程。

DELETE语句在执行被取消。

插入记录并显示:“sal不符合规定.无法插入此记录!”;在插入或修改教师表的数据”.要求触发触发器的DELETE、UPDATE语句被执行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六存储过程与触发器
一、目的与要求
1.掌握编写数据库存储过程的方法。

2.掌握建立数据库触发器的方法,通过实验观察触发器的作用与触发条件设置
等相关操作。

二、实验准备
1.了解编写存储过程与调用的T-SQL语法;
2.了解触发器的作用;
3.了解编写触发器的T-SQL语法。

三、实验内容
(一)存储过程
在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号与课程名称,若院系不存在,返回提示信息。

提示:D_Info表中存储了院系代码D_ID,而St_Info表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。

1.分别执行存储过程getPractice,查询“法学院”与“材料科学与工程学院”
的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号与课程名称。

create procedure getPractice
@D_Name varchar(30)
output
as
begin
if not exists
(select *
from D_Info
where D_Name= @D_Name
)
print '对不起,该院系不存在'
else
select st_info、St_ID,C_Info、C_No,C_Name
from s_c_info inner join st_info on st_info、St_ID=s_c_info、st_id
inner join C_Info on s_c_info、c_no=C_Info、C_No
where st_info、St_ID in
( select St_ID
from st_info join D_Info on D_Info、D_ID =left(st_info、St_ID,2)
where C_Info、C_Type='实践' and D_Info、D_Name= @D_Name
)
end
go
2.利用系统存储过程sp_rename将getPractice更名为getPctStu
execute sp_rename getPractice , getPctStu
3.修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数,并利
用该存储过程以“法学院”为输入参数验证执行的结果
alter procedure getPctStu
@D_Name varchar(30)
as
begin
if not exists
(select *
from D_Info
where D_Name= @D_Name
)
print '对不起,该院系不存在'
else
select st_info、St_ID,C_Info、C_No,C_Name,count (st_info、St_ID) as 人次数
from s_c_info inner join st_info on st_info、St_ID=s_c_info、st_id
inner join C_Info on s_c_info、c_no=C_Info、C_No
where st_info、St_ID in
( select St_ID
from st_info join D_Info on D_Info、D_ID =left(st_info、St_ID,2)
where C_Info、C_Type='实践' and D_Info、D_Name= @D_Name
)
group by st_info、St_ID,C_Info、C_No,C_Name
end
Go
exec getPctStu '法学院'
Go
4.再修改存储过程getPctStu,返回指定院系中参与实践课程的学生人数。

注:“人数”与“人次数”就是不同的,对某一学生而言,如果参与了多门实践课程,则“人次数”就是指其参与的课程门数,而“人数”仍为1。

(二)触发器
1、在studentdb数据库中建立一个具有审计功能的触发器:
触发器名为tr_sc,功能要求:审计在s_c_info表中对score字段的更新与插入操作,将这些操作记录到sc_log表中,sc_log表中有如下字段:操作类型type,学号st_id,课程号c_no,旧成绩oldscore,新成绩newscore,操作员uname,操作时间udate,其中操作员设定默认值为user,操作时间默认值为系统时间。

create table sc_log
(type varchar(4),
st_id varchar(10),
c_no varchar(10),
oldscore int,
newscore int,
uname varchar(10) default user,
udata datetime default getdate()
)
go
create trigger tr_sc
on s_c_info
for insert,update
as
if update(score)
begin
if(select count(*) from deleted)<>0
insert into sc_log(type,st_id,c_no,oldscore,newscore)
select 'update',s_c_info、st_id,s_c_info、c_no,i、score,d、score from s_c_info,inserted i,deleted d
where s_c_info、st_id=i、st_id and i、st_id=d、st_id
else
insert into sc_log(type,st_id,c_no,newscore)
select 'insert',st_id,c_no,score
from inserted
end
go
3.在s_c_info表上建立一个触发器tr_updasc,用于监控对成绩的更新,要求
更新后的成绩不能比更新前低,如果新成绩低则取消操作,给出提示信息,否则允许更新。

create trigger tr_updasc
on s_c_info
after update
as
declare @cj1 int,@cj2 int
select @cj1=deleted、score from deleted
select @cj2=inserted、score from inserted
if(@cj2<@cj1)
begin
raiserror('新成绩比老成绩低,取消操作',16,1)
rollback transaction
end
go
(三)查瞧存储过程与触发器的信息
1、用sp_help查瞧以上建立的存储过程与触发器的基本信息sp_help tr_sc
go
sp_help tr_updasc
go
2、用sp_helptext查瞧存储过程与触发器的代码sp_helptext tr_sc
go
sp_helptext tr_updasc
go
四、思考与练习
1.存储过程如何加密?
Create procedure encrypt_this
With encryption --加密,在存储过程添加这一语句即可
AS
Select* from user_tb
GO
查瞧存储过程储存的文本:
Exec sp_helptext encrypt_this
下面就是结果集:
The project’s comments have been encrypted、--对象已经被加密
2.触发器有什么好处与坏处?
使用触发器的好处:
1、自动执行。

触发器在对表的数据作了任何修改(比如手工输入或者应用程序的操作)之后立即被激活。

2、级联更新。

触发器可以通过数据库中的相关表进行层叠更改,这比直接把代码写在前台的做法更安全合理。

3、强化约束。

触发器可以引用其它表中的列,能够实现比CHECK约束更为复杂的约束。

4、跟踪变化。

触发器可以阻止数据库中未经许可的指定更新与变化。

5、强制业务逻辑。

触发器可用于执行管理任务,并强制影响数据库的复杂业务规则。

相对于外部程序、存储过程,触发器可以更快更高效地维护数据。

滥用数据库的坏处:
滥用会造成数据库及应用程序的维护困难。

一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便。

相关文档
最新文档