存储过程与触发器实验

合集下载

实验六存储过程和触发器.

实验六存储过程和触发器.

实验六使用SQLServer查询分析器创建存储过程和触发器一、实验目的(1) 掌握存储过程的实现;(2) 掌握触发器定义和使用;(3) 利用存储过程和触发器维护数据完整性;(4) 了解使用存储过程来进行数据库应用程序的设计。

二、实验内容(1) 编写存储过程;(2) 创建触发器。

三、实验步骤:(包含实验记录,提供的数据、图表等资料内容)1、对教学管理数据库,编写存储过程,完成下面功能:(1)①创建一个无参存储过程StuScoreInfo,查询以下信息:学号、姓名、性别、课程名称、考试成绩。

②写出存储过程的调用语句。

(2) ①创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在S表中查询此学生的信息。

②写出存储过程的调用语句。

(3) ①创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生编号和课程号查询以下信息:学号、姓名、性别、课程名称、考试成绩。

②写出存储过程的调用语句。

(4) ①编写带参数的存储过程,根据传入的课程名称统计该课程的平均成绩。

②写出存储过程的调用语句。

2、对教学管理数据库,编写触发器,完成下面功能:(1) 在SC表上创建一个删除学生成绩事件的触发器,触发动作为输出:“对不起,学生成绩不允许删除”,并且回滚删除事务。

(2) 创建一个删除学生的触发器,删除学生前要先删除学生成绩。

(3) 创建一个AFTER触发器,完成的功能是:在sc表上创建一个插入、更新类型的触发器scCheck,当在sc表的grade字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间,如果不在0-100之间就输出“输入分数错误”。

(4) 定义一个学生查询所有选课成绩的视图VIEW_SC,要求显示学号、学生姓名、课程名、学分、成绩。

在该视图上创建一个插入数据的INSTEAD OF 触发器,代替插入命令执行查询操作。

四、实验报告要求1、用SQL表示实验内容里的相应语句;2、列出遇到的问题和解决办法;3、列出没有解决的问题;4、写明实验所采用的实验环境。

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

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

实验五:触发器和存储过程一.实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。

二.实验内容:有一个小型的图书管理数据库,包含的表为:bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表borrowcard(cardid,ownername);--借书证表borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表写一个存储过程,实现借书操作,要求有事务处理。

(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。

(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。

(3)要求用触发器实现表的完整性控制。

三、操作与运行1.创建图书数据库:create table bookstore(bookid int not null primary key,bookname char(20),bookauthor char(20),purchasedate datetime,state char(4))create table borrowcard(cardid int not null primary key,ownername char(20))create table borrowlog(cardid int not null,bookid int not null,borrowdate datetime,returndate datetime,primary key(cardid,bookid),---foreign key(cardid)references borrowcard(cardid), ---foreign key(bookid)references bookstore(bookid) )通过以上语句,可以看到数据库中的表建立成功。

实验五存储过程和触发器(计科)

实验五存储过程和触发器(计科)

实验五存储过程和触发器(计科)实验五:触发器和存储过程一、实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。

二、预习要求:存储过程和触发器的相关概念,事务的相关概念,编写相应的SQL语句。

三、实验内容:有一个小型的图书管理数据库,包含的表为:bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表borrowcard(cardid,ownername);--借书证表borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表写一个存储过程,实现借书操作,要求有事务处理。

(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。

(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。

(3)要求用触发器实现表的完整性控制。

四、完成情况(附上设计的SQL语句)。

------触发器和存储过程------触发器和存储过程CREATE DATABASE BOOK1gouse BOOK1CREATE TABLE BOOKSTORE(Bookid nvarchar(10),Bookname nvarchar(10),Bookauthor nvarchar(10),purchasedate datetime,state Nvarchar(10),primary key(Bookid))Create table Borrowcard(Cardid int,ownernamenvarchar(10),primarykey(Cardid))Create table Borrowlog(Cardid int,Bookid nvarchar(10),borrowdate datetime,returndate datetime ,primary key(Cardid,Bookid))insert into Borrowcard values(12,'wyb')insert into Borrowcard values(123,'wyb')insert into Borrowcard values(1,'wyb')insert into Bookstore values(1,'数据库','王珊','2012-04-23','存在') insert into Bookstore values(2,'数据结构','珊','2012-11-23','存在') insert into Bookstore values(3,'数据结构','珊','2011-1-23','存在') insert into Bookstore values(11,'数据库','王珊','2009-10-23','存在') insert into Bookstore values(12,'数据结构','珊','2001-11-23','存在') insert into Bookstore values(13,'数据结构','珊','2013-12-23','存在')----借书存储过程create proc borrow1@bookid nvarchar(10),@cardid intasbegin transactioninsert into Borrowlog(Cardid,Bookid,borrowdate,returndate) values(@cardid,@bookid,getdate(),null)if exists(select*from bookstore,Borrowcard where bookid=@bookid and state='存在'and cardid=@cardid) beginupdate bookstore set state='不存在'where bookid=@bookid commit transactionendelsebeginif exists(select*from bookstore where bookid=@bookid and state='不存在')Print'不存在该书'if not exists(select*from borrowcard,bookstore where cardid=@cardid) Print'没有此用户'rollback transactionEndexec borrow1'3',12exec borrow1'3',123exec borrow1'2',123drop proc borrow1----删除存储过程Create trigger insert_borrowlogon Borrowlog after insertasdeclare@borrowdate datetime,@returndate datetimeselect@borrowdate=borrowdate,@returndate=returndate from insertedif(@borrowdate>@returndate)print'借书时间不可晚于还书时间'rollbackselect*from bookstoreinsert into Borrowlog values(12,'1','2013-06-06','2012-05-5')五、思考题:如何通过系统的设置实现类似的功能,而不需触发器?答:通过定义存储过程或者设置外键约束等方法。

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

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

实验六存储过程和触发器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,查询指定班级指定课程的平均分。

实验五触发器与存储过程的设计-西安理工大学

实验五触发器与存储过程的设计-西安理工大学

实验五触发器与存储过程的设计-西安理工大学实验五触发器与存储过程的设计实验目的1、掌握创建存储过程的方法和步骤。

2、掌握存储过程的使用方法。

3、掌握创建触发器的方法和步骤。

4、掌握触发器的使用方法。

实验内容、要求以教学管理系统为例,有Student、SC和Course表,根据数据库的完整性要求,自己设计一个存储过程和触发器,当删除SC表的某条记录时,在屏幕上给出提示,当删除该条记录后,若没有学生选择此门课时,要求将Course表中对应的记录删除。

实验环境Microsoft Word, SQL Server 2000环境。

实验过程一、存储过程的设计1、有关概念存储过程是由SQL语句及控制流语句组成的集合。

调用一个存储过程,可以一次性地执行过程中的所有语句。

从这一点来说,它类似于程序。

存储过程由用户建立,它作为数据库的一个成分,存在于数据库中。

存储过程类似VFP中的过程(函数、子程序),它可以接受参数,也可以返回参数。

存储过程可以被客户端、其他存储过程或触发器调用。

以SP_为前缀的存储过程是SQL提供的系统存储过程; 以XP_为前缀的存储过程是扩展的存储过程; 关联到表上的存储过程称为触发式存储过程。

2、设计存储过程使用SQL语句创建存储过程(或使用企业管理器创建存储过程)。

3、执行存储过程对存储在服务器上的存储过程,使用EXECUTE命令执行它。

4、操作存储过程查看、修改、删除存储过程。

二、触发器的设计触发器是一种特殊的存储过程, 用它来控制关联的表。

1、设计一个触发器使用SQL语句创建触发器(使用企业管理器创建触发器)。

2、查看、修改和删除触发器实验六图书管理系统设计及SQL编程实验目的初步掌握数据库系统的开发过程实验内容1.根据数据库设计的基本思想,设计出图书管理系统的概念结构(用E-R图表示)。

2.根据E-R图进行数据库的逻辑设计。

3.在逻辑设计的基础上,进行数据库的物理设计。

4.给出各设计阶段的完整文档(E-R图、逻辑模型、数据字典)。

实验8 存储过程和触发器

实验8  存储过程和触发器

实验8 存储过程和触发器一、实验目的1.掌握通过企业管理器和Transact —SQL语句和CREATE PRODCEDURE创建存储过程的方法和步骤。

2.掌握使用企业管理器和Transact —SQL语句和EXECUTE执行存储过程的方法。

3.掌握通过企业管理器和Transact —SQL语句CREATE TRIGGER创建触发器的方法和步骤。

4.掌握引发存储器的方法。

5.掌握使用系统存储过程管理存储过程和触发器的方法。

6.掌握事物,命名事物的创建方法,不同类型的事务的处理情况。

二、实验准备1.了解存储过程的基本概念和类型。

2.了解创建存储过程的Transact —SQL语句的基本语法。

3.了解查看、执行、修改和删除存储过程的基本语法。

4.了解触发器的基本概念和类型。

5.了解创建触发器的Transact —SQL语句基本用法。

6.了解查看、修改和删除触发器的Transact —SQL语句的用法。

7.了解创建事务,处理事务的方法和过程。

8.了解锁机制。

三、实验内容和步骤1.在查询分析器中输入以下代码,创建一个利用流控制语句的存储过程lletters_print,该存储器能显示26个小写字母。

单击查询分析器的“执行查询”按钮,查看studentsdb数据库的存储过程是否有letters_print.使用EXECUTE命令执行letters_print存储过程。

CREATE PROCEDURE letter_printASDECLARE @count intSET @count=0WHILE @count<26BEGINPRINT CHAR(ASCII(‘a’)+@count)SET @count =@count +1ENDEXEC letter_print输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。

使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。

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

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

数据库技术与应用实验报告七班级:机械因材学号: 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中创建的存储过程。

图八在Teacher上创建一个触发器,该触发器被操作DELETE所触发,且要求触发触发器的DELETE语句在执行被取消。

5 实验五 创建存储过程和触发器

5 实验五 创建存储过程和触发器

实验五创建存储过程和触发器
一、实验目的
1.通过对常用系统存储过程的使用,了解存储过程的类型;通过创建和执行存储过程,了解存储过程的基本概念,掌握使用企业管理器及查询分析器执行T-SQL语句创建存储过程。

2.通过创建触发器,了解触发器的基本概念,理解触发器的功能,掌握使用企业管理器及查询分析器执行T-SQL语句创建触发器。

二、实验要求
1.实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;
2.能认真独立完成实验内容;
3.实验后做好实验总结,根据实验情况完成总结报告。

三、实验学时
2学时
四、实验内容
1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。

2、在实验二创建的factory数据库中执行以下操作:
(1)创建一个为worker表添加职工记录的存储过程addworker。

执行并验证存储过程的正确性。

最后删除该存储过程。

(2)在depart表上创建一个触发器depart_update,当更改部门号时同步更改worker 表中对应的部门号。

执行并验证触发器的正确性。

最后删除该触发器。

(3)在worker表上创建一个触发器worker_delete,当删除职工记录时同步删除salary表中对应职工的工资记录。

执行并验证触发器的正确性。

最后删除该触发器。

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

第一章 存储过程与触发器实验
实验目的
1.理解存储过程的工作原理和作用。
2.掌握存储过程设置和程序设计过程。
3.理解触发器的工作原理和作用。
4.掌握触发器编写方法。

实验环境
采用IBM DB2或Sybase数据库管理系统作为实验平台。其中,DB2可以采用DB2
Express-C或DB2 V8 Enterprise。
实验完成人:李肇臻,谢锦

实验内容

一、存储过程实验
1.针对下面2个完整性约束条件,建立存储过程,实现当数据导入或更新时,可以自动修
改拥塞率、半速率话务量比例
(1) 拥塞率 = 拥塞数量/呼叫数量
(2) 半速率话务量比例 = 半速率话务量/全速率话务量
在DB2CMD中运行,win7用管理员权限。
create procedure M()
language SQL
begin
update CALLDATA
set "callcongs"="congsnum"/"callnum"
where "congsnum"<>0 and "callnum"<>0;
update CALLDATA
set "rate"="thtraff"/"traff"
where "thtraff"<>0 and "traff"<>0;
end @
2.将存储过程添加到数据库服务器上
3.在客户端编写调用存储过程的主程序
4.运行客户端程序,调用存储过程,观察存储过程执行过程和数据更新情况;调用就用db2
CALL M()

二、触发器实验
1. 针对下列约束条件,分别建立1个触发器:
1)每个小区/扇区最多占用14个TCH频点,合法频点范围在[1,60]之间。当向小区中新加
入频点时,如果小区中现有频点数目已达到14个,则用新加入的频点替换现有频点中的最
小频点;当修改或新加入频点时,如果发现频点不在合法范围内,则输出提示信息,并拒
绝该操作。

create trigger first_1 after insert on FREQUENCY
referencing new row as nrow
for each row
when(nrow."CellID" in(select "CellID"
from FREQUENCY
group by "CellID"
having
count("Freq")=15))
delete from FREQUENCY
where(("CellID","Freq") in(select "CellID",min("Freq")
from FREQUENCY
where("CellID"=nrow."CellID" and "Freq" <>nrow."Freq")
group by "CellID"))

create trigger first_2 before insert on FREQUENCY
referencing new row as nrow
for each row
when
(
nrow."Freq"<1 or nrow."Freq">60
)
signal sqlstate '80001' set message_text='Freq不合法';

create trigger first_3 before update on FREQUENCY
referencing new row as nrow
for each row
when
(
nrow."Freq"<1 or nrow."Freq">60
)
signal sqlstate '80001' set message_text='FREQ不合法';
2)每个小区有且只能有一个BCCH频点,合法范围在[70-90]之间。当修改或新加入BCCH
频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。

create trigger second_1 before insert on CELL
referencing new row as nrow
for each row
when((select count("Bcch")
from CELL
where "CellID"=nrow."CellID")=1
or (nrow."Bcch">90 or nrow."Bcch"<70))
signal sqlstate '80001' set message_text='Bcch不合法';

create trigger second_2 before insert on CELL
referencing new row as nrow
for each row
when( nrow."Bcch">90 or nrow."Bcch"<70 )
signal sqlstate '80001' set message_text='Bcch不合法';

create trigger second_3 before update on CELL
referencing new row as nrow
for each row
when( nrow."Bcch">90 or nrow."Bcch"<70 )
signal sqlstate '80001' set message_text='Bcch不合法'
3)每个小区与其邻小区的BCCH不允许相同。当修改某小区的BCCH频点值时,如果发现
修改后与其它邻区的BCCH频点相同,则则输出提示信息,并拒绝该操作。
create trigger three_1 after update on CELL
referencing new row as nrow
for each row
when(nrow."Bcch"
in
(select "Bcch"
from CELL,NEIGHBOR
where nrow."CellID"="AdjcellID")
)
signal sqlstate '80001' set message_text='Bcch修改不合法';
2.将触发器添加到数据库服务器上
3.向数据库添加新的TCH、BCCH频点数据,或修改已有TCH、BCCH频点数据,观察当
违反上述3条约束时,触发器的执行情况。
第一题:
插入一个大于60的频点:
insert into FREQUENCY
values(9012,89);

第二题:
update CELL
set "Bcch"=99
where "CellID"=9011
第三题:
9152有个相邻小区9031,9031的Bcch是70.
update CELL
set "Bcch"=70
where "CellID"=9152


实验总结
初步了解了存储过程的作用,并尝试编写一个存储过程,了解触发器的工作原理,更深
入的掌握触发器的编写方法。

相关文档
最新文档