存储过程与触发器实验
- 格式:docx
- 大小:451.00 KB
- 文档页数:10
实验六使用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 存储过程和触发器一、实验目的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语句在执行被取消。
实验五创建存储过程和触发器
一、实验目的
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表中对应职工的工资记录。
执行并验证触发器的正确性。
最后删除该触发器。
实验7 存储过程和触发器1.存储过程的创建和调用练习1:创建存储过程getcours功能:根据学号查询该学生选课信息,包括学号,课程号、课程名分析:存储过程名:getcourse 形式参数:@xh(1)请写出存储过程创建语句(2)调用存储过程(参考下图存储过程的创建,下图中第三行和第四行应该是在一行才对)练习2:存储过程名getsum功能:计算任意三个数之和分析:需要三个形式参数:@a @b @c(1)请写出存储过程创建语句(2)调用存储过程可以参考add_two 存储过程的创建:2.触发器(四选三)第一步:附加学生数据库第二步:创建触发器注意两个临时表的应用:inserted表和deleted表。
插入和修改操作会将新数据的副本存入inserted表,修改和删除操作会把原有数据存入deleted表中练习1:创建出发器功能:当删除表student中的记录时,自动将删除掉的记录存放到s1表中。
提示:先建立一个与student表结构一样的表s1(可以复制学生表,然后重命名为s1,删除s1表中的数据)练习2:创建触发器tri_stu_del功能:当删除学生表中某个学生的信息时,级联删除该生的选课信息.(执行完触发器创建后将这些语句注释掉,然后删除学生表中一个已经选课的学生,查看选课表中有没有一起删除)练习3:创建触发器tri_StuUpdateSno功能:修改学生表学号字段时(因为修改其他字段不影响选课表),同时修改选课表中该生的学号(执行完触发器创建后将这些语句注释掉,然后修改学生表中一个已经选课的学生,查看选课表中学号有没有一起修改)参考下面的存储过程,每行后面是注释。
练习4:创建触发器tri_ScInsert功能:向选课表中插入一条数据时,检测学号和课程号是否存在,如果不存在,则删除这条数据参考下面的触发器:。
实验7 存储过程和触发器二、背景知识(1)存储过程概述:存储过程是SQL语句和可选控制流程语句的预编译集合,它以一个名称存储并作为一个单元处理。
存储过程存储在数据库内,可由应用程序通过一个调用执行。
存储过程可以接受参数,输出参数,返回单个或多个结果集,也可以返回一个值。
存储过程具有以下优点:●可以在一个存储过程中,执行一系列SQL语句。
●存储过程可以嵌套调用,以简化语句的描述●存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,并且能减少网络通信的负担。
●存储过程中的参数可以具有默认值,默认值必须为常量或者NULL。
(2)触发器概述:触发器是一种特殊类型的存储过程,常用作数据完整性约束。
一个系统有三类触发器,分别为:INSERT触发器、UPDATE触发器和DELETE触发器。
通常INSERT、UPDATE触发器被用来检查插入或者修改后的数据是否满足要求。
DELETE触发器一般用作级联删除或记录外键的删除操作。
当对指定表执行INSERT、UPDATE、DELETE时,相应的触发器会自动执行。
触发器可以包含复杂的T-SQL语句。
一个表可以有多个触发器。
在触发器执行的时候,会产生两个临时表:INSERTed表和deleted 表。
它们的结构和触发器所在的表的结构相同,SQLSERVER自动创建和管理这些表。
在对触发器的表进行操作时,系统执行过程如下:●执行INSERT操作,插入到触发器表中的新行同时被插入到INSERTed表中。
●执行DELETE操作,从触发器表中删除的行同时被插入到deleted 表中。
●执行UPDATE操作,先从触发器表中删除旧行,然后再插入新行。
其中,被删除的旧行,同时被插入到deleted表中;插入的新行,同时被插入到INSERTed表中。
触发器可以使用这两个临时表测试数据修改的效果及设置触发器操作的条件。
触发器具有以下优点:●触发器可通过数据库中的相关表实现级联更改。
实验七存储过程与触发器(实验报告)一、目的1.掌握存储过程和触发器的基本概念和功能。
2.掌握创建、管理存储过程的方法。
3.掌握创建、管理触发器的方法。
二、实验内容(1)完成下列操作1.利用SQL Server Management Studio创建一个查询过程ProNum,查询每个班级中学生的人数,按班级号升序排列。
2.利用Transact-SQL语句创建一个带有参数的存储过程ProInsert,向score表插入一条选课记录,并查询该学生的姓名、选修的所有课程名称、平时成绩和期末成绩。
3.利用Transact-SQL语句创建一个存储过程ProAvg,查询指定班级指定课程的平均分。
班级号和课程名称由输入参数给定,计算出的平均分通过输出参数返回。
若该存储过程存在,则删除后重建。
4.利用SQL Server Management Studio创建一个AFTER触发器trigsex,当插入或修改student表中性别字段sex时,检查数据是否只为‘男’或‘女’。
5.利用Transact-SQL语句创建一个AFTER数据库trigforeign,当向score表中插入或修改记录时,如果插入或修改的数据与student表中数据部匹配,即没有对应的学号存在,则将此记录删除。
6.利用Transact-SQL语句创建一个AFTER触发器trigclassname,当向class表中插入或修改数据时,如果出现班级名称重复则回滚事务。
若该触发器存在,则删除后重建。
(2)完成实验报告三、实验环境SQL2005。
四、实验原理1.理解存储过程。
2.掌握触发器的使用。
五、实验报告将实验内容作为实验报告完成。
六、实验小结。
信息工程学院实验报告课程名称:《数据库原理》实验项目名称:存储过程与触发器一、实验目的:(1)了解存储过程的概念(2)掌握创建、执行存储过程的方法(3)了解查看、修改和删除存储过程的方法(4)了解触发器的概念(5)掌握创建触发器的方法(6)掌握查看、修改、删除触发器信息的方法二、实验设备与器件Win7 +Sql server 2008三、实验内容与步骤(一)存储过程运行实验四附录中的SQL语句,准备实验数据。
然后创建下列存储过程,并调试运行存储过程,查看运行结果。
1.在企业管理器中创建一个名为StuInfo的存储过程,完成的功能是在student表中查询系号为D2的学号、姓名、性别、年龄、系号的内容。
CREATE PROCEDURE StuInfoASSELECT SNO AS学号,SNAME AS姓名,SSEX AS性别,SAGE AS年龄,DNO AS系号FROM studentWHERE DNO='D2'结果:stuinfo2.使用T_SQL语句创建存储过程,完成的功能是在表student,course和study中查询以下字段:学号、姓名、性别、课程名称、考试分数。
use mydb--查询是否已存在此存储过程,如果存在,就删除它if exists(select name from sysobjectswhere name='StuScoreInfo'and type='P')drop procedure StuScoreInfogo--创建存储过程CREATE PROCEDURE StuScoreInfoasselect student.sno as学号,sname as姓名,ssex as性别,ame as课程名称,study.grade as考试分数from student,course,studywhere student.sno=study.sno and o=o结果:StuScoreInfo3.使用T_SQL语句创建一个带有参数的存储过程stu_sno_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。
实验五触发器、存储过程操作实验本实验需要2学时。
请大家先根据“触发器.doc”文档完成相关操作,再进行本次实验。
介绍完“存储过程”后,需上交本次实验报告。
一、实验目的(1)掌握SQL Server中的触发器的使用方法;(2)掌握存储过程的操作方法。
二、实验内容1. 创建、查看、修改和删除触发器。
2. 创建、查看、修改和删除存储过程。
三、实验方法1. 触发器的操作(1)建立触发器方法一:使用企业管理器首先,打开企业管理器,定位数据库并找到要创建触发器的表;然后,右击该表名,在弹出的快捷菜单中选择“设计表”,在打开的“设计表”窗口中单击按钮,打开如图1所示窗口。
图1 触发器属性窗口最后,在触发器属性窗口中输入触发器的内容,并单击“确定”按钮。
方法二:使用CREATE TRIGGER语句语法:CREATE TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]}AS<SQL 语句块>(2)查看触发器方法一:使用企业管理器方法二:使用T-SQL语句- sp_help <触发器名>- sp_helptext <触发器名>- sp_depends <触发器名>(3)修改触发器方法一:使用企业管理器方法二:使用ALTER TRIGGER语句语法:ALTER TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]} AS<SQL 语句块>(4)删除触发器方法一:使用企业管理器方法二:使用DROP TRIGGER语句语法为:DROP TRIGGER <触发器名>2. 存储过程的操作(1)建立存储过程方法一:使用建立存储过程向导方法二:使用企业管理器方法三:使用SQL语句(CREATE PROCEDURE)语法:CREATE PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句> | <语句块> }(2)查看存储过程方法一:使用企业管理器方法二:使用SQL语句(系统存储过程)- sp_help <存储过程名>- sp_helptext <存储过程名>- sp_depends <存储过程名>(3)修改存储过程方法一:使用企业管理器方法二:使用SQL语句(ALTER PROCEDURE)语法为:ALTER PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句>| <语句块> }(4)删除存储过程方法一:使用企业管理器方法二:使用DROP PROCEDURE语句语法为:DROP PROCEDURE <存储过程名>四、实验内容1、在学生表student上建立一个DELETE类型的触发器tr_delete,触发动作是显示信息“已删除学生表中的数据”。
实验七存储过程和触发器
一、实验目的
✓掌握通过企业管理器和Transact—sql语句SCREATE PROCEDURE创建存储过程的方法和步骤。
✓掌握通过企业管理器和Transact—sql语句Execute执行存储过程的方法。
✓掌握通过企业管理器和Transact—sql语句SCREATE PROCEDURE创建触发器的方法和步骤。
✓掌握引发触发器的方法。
✓学会使用系统存储过程。
二、实验内容与要求
1、为sell_order表创建两个存储过程:prStoreOrderID可以插入一个订单并返回订单号,prStoreOrderItem可以插入订单项。
2、创建一个存储过程,该存储过程创建一个只有一个整型字段的临时表。
然后存储过程把从1~100的数插入表中,最后作为一个结果集返回给调用者。
3、创建一个名为prUpdateName的存储过程,并用它来更新表goods中指定记录的goods_name字段。
4、使用查询分析器获取存储过程prTest的源代码。
5、使用查询分析器将存储过程prTest重命名为npr_Test。
6、使用查询分析器删除存储过程sp_Test。
7、为DEPARTMENT表创建一个触发器,使得该表中的部门号发生变化时,EMPLOYEE表中相应记录的字段自动该表,并编写命令触发之。
三、实验要求
实验报告格式要求
1.实验目的
2.实验内容
3.实验过程
4.总结。
实验6 存储过程和触发器一、实验目的1、加深和巩固对存储过程和触发器概念的理解。
2、掌握触发器的简单应用。
3、掌握存储过程的简单应用。
二、实验内容一)存储过程:1. 创建一存储过程,求l+2+3+…+n,并打印结果。
CREATE PROCEDURE addresultASDECLARE @n int=10,/*最后一个数*/@i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。
EXEC addresult3. 修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。
CREATE PROCEDURE addresult1@n int=10 /*最后一个数*/ASDECLARE @i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO4. 调用上面修改后的addresult1存储过程,打印l+2+3+ (100)结果。
EXEC addresult1 1005.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。
CREATE PROCEDURE addresult2@n int=10,/*最后一个数*/@sum int out/*结果*/ASDECLARE @i int=0BEGINset @sum=0WHILE(@i<=@n)BEGINSET @sum=@sum+@iSET @i=@i+1ENDENDGO6.调用上面修改后的addresult2存储过程,设置变量@s接收计算l+2+3+…+10的结果。
实验六存储过程和触发器实验六存储过程和触发器一、目的与要求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)asselectst_info.st_id,st_info.st_name,s_c_info.c_no,c_info.c_name from st_info,d_info,s_c_info,c_infowhere d_info.d_name=@d_name and st_info.st_id=s_c_info.st_idand d_info.d_id=left(st_info.st_id,2)and s_c_info.c_no=c_info.c_no and c_info.c_type='实践'Goexec getPractice '法学院'exec getPractice '材料科学与工程学院'2.利用系统存储过程sp_rename将getPractice更名为getPctStusp_rename getpractice,getPctStu3.修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数,并利用该存储过程以“法学院”为输入参数验证执行的结果alter procedure getPctStu@d_name varchar(30)asselect count(s_c_info.st_id)from s_c_info,c_info,d_info,st_infowhere d_info.d_name=@d_name and st_info.st_id=s_c_info.st_id andd_info.d_id=left(st_info.st_id,2) ands_c_info.c_no=c_info.c_noand c_info.c_type='实践'goexec getPctStu '法学院'4.再修改存储过程getPctStu,返回指定院系中参与实践课程的学生人数。
第一章 存储过程与触发器实验
实验目的
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
实验总结
初步了解了存储过程的作用,并尝试编写一个存储过程,了解触发器的工作原理,更深
入的掌握触发器的编写方法。