实验四存储与触发器_第1页
实验四存储与触发器_第2页
实验四存储与触发器_第3页
实验四存储与触发器_第4页
实验四存储与触发器_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 学生课程实验报告书 2013 级 工 商 管 理 系 信息管理与信息系统 专业 1301 班 学号 3138905150 姓名 刘玲颖 2015 -2016 学年 第 二 学期一、实验题目存储过程、触发器二、实验目的1. 了解存储过程的概念和作用。2、掌握创建存储过程的方法。3、掌握学会创建和使用触发器。4、加深对数据库完整性的理解。三、 实验内容1、在“教务管理系统”数据库中创建一个名为ProcStudentInfo的存储过程,它返回学生的学号、姓名、性别、班级编号、年级和籍贯信息。2、用EXECUTE执行Proc_StudentInfo存储过程。3、创建一个存储过程,用于返回“教务管理系

2、统”数据库上某个班级中所有学生的信息。4、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息,默认班级编号为'20031340000102' 。5、使用不同参数传递值方式执行存储过程。6、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中的学生人数,默认班级编号为20031340000102 。7、定义一个变量用来存储存储过程Proc_GetClassStudent3返回的值。8、创建一个返回执行代码为100的存储过程。9、执行存储过程Proc_GetClassStudent2和Proc_GetClassStudent4,并定义两个个变量存储执

3、行返回代码。10、在commoditysell中创建一个名为GetFactProd的存储过程,用于实现:由执行该存储过程时提供的厂家的名称,查询其生产的产品信息,返回产品的ProdID、ProdName、UnitPrice和StockAmount。(使用“四川绵阳”和“上海黄埔”两个厂家的名称执行存储过程)11、在commoditysell中创建一个名为SellProdAmount的存储过程,用于实现:由执行该存储过程时提供的商场的名称,查询其销售的产品数量,并用输出参数输出销量数。(使用“双桥子商场”和“十陵商场”两个商场名称执行程存储过程)12、设计一个简单的AFTER INSERT触发器

4、,这个触发器的作用是:在插入一条记录的时候,发出“又添加了一个学生的成绩”的友好提示。 13、在score表中创建触发器,在向score表中插入数据时,先检待插入的数据中的sno和cno是否存在于student表和sc表中,如果不存在则不允许插入。14、创建一个触发器,当删除student表中的数据时,需要判断该数据对应的学生是否有选课,如果有,也需要将其选课信息全部删除。 15、在score表上创建一个instead of insert触发器,实现:当向表score插入记录时检查分数的合理性,如果不合理就不进行插入操作,否则允许。16、在score表上创建一个instead of delet

5、e触发器,实现:当从表score删除记录时检查各课程的成绩是否为空,如果为空就不允许进行删除操作,否则允许。17、在score表上创建一个instead of update触发器,实现:当从表score更新记录时检查当前用户是否是dbo,如果不是dbo就不允许进行更新操作,否则允许。18、给sell表创建一个after insert 触发器,实现:当向sell插入一条记录时,修改stock表stock_amount(库存数量),值等于stock_amount-sell_amount,还有修改时间modified_date,并显示相应的提示信息:“库存量还剩余stock_amount-sell_

6、amount”,当(stock_amount-sell_amount)<0时,不允许进行插入操作,即操作回滚,并显示相应的提示信息:“库存量不足,只有stock_amount”。四、 实验步骤1、在“教务管理系统”数据库中创建一个名为ProcStudentInfo的存储过程,它返回学生的学号、姓名、性别、班级编号、年级和籍贯信息。create procedure ProcStudentInfoas select 学号,姓名,性别,班级编号,年级,籍贯 from 学生信息2、用EXECUTE执行Proc_StudentInfo存储过程。execute Proc_StudentInfo3、创

7、建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息。CREATE PROCEDURE Proc_GetClassStudent1 ClassID varchar(14) AS SELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息 WHERE 班级编号=ClassID4、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息,默认班级编号为'20031340000102' 。REATE PROCEDURE Proc_GetClassStudent2 ClassID varchar(14)= '200313400

8、00102' AS SELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息 WHERE 班级编号=ClassID5、使用不同参数传递值方式执行存储过程。EXEC Proc_GetClassStudent2EXEC Proc_GetClassStudent2 '20031340000101' EXEC Proc_GetClassStudent2 ClassID='20031340000104'6、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中的学生人数,默认班级编号为20031340000102use 教务管理系统goCRE

9、ATE PROCEDURE Proc_GetClassStudent3ClassID varchar(14)='20031340000102'asSELECT count(学号) as 学生人数 FROM 学生信息 where 班级编号= classidEXECUTE Proc_GetClassStudent3 '20031340000102' 。7、定义一个变量用来存储存储过程Proc_GetClassStudent3返回的值。use 教务管理系统gocreate procedure Proc_GetClassStudent3 banji char(14),o

10、ut numeric(3,0) output asselect out=人数 from 班级信息where 班级编号=banji and banji='20031340000102'declare out numeric(3,0) execute Proc_GetClassStudent3 '20031340000102',out outputselect out as 人数8、创建一个返回执行代码为100的存储过程。USE 教务管理系统 GO CREATE PROCEDURE Proc_GetClassStudent4 ClassID varchar(14)

11、AS BEGIN SELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息 WHERE 班级编号=ClassID RETURN 100 END9、执行存储过程Proc_GetClassStudent2和Proc_GetClassStudent4,并定义两个个变量存储执行返回代码。DECLARE return1 int,return2 int EXEC return1=Proc_GetClassStudent2'20031340000102' EXEC return2=Proc_GetClassStudent4'20031340000102' SE

12、LECT return1 SELECT return210、在commoditysell中创建一个名为GetFactProd的存储过程,用于实现:由执行该存储过程时提供的厂家的名称,查询其生产的产品信息,返回产品的ProdID、ProdName、UnitPrice和StockAmount。(使用“四川绵阳”和“上海黄埔”两个厂家的名称执行存储过程)use commoditysellgocreate procedure GetFactProd 厂名 char(8)asselect ProdID,ProdName,UnitPrice,StockAmount from ProductInfowher

13、e FactAddr=厂名execute GetFactProd '四川绵阳'execute GetFactProd '上海黄埔'11、在commoditysell中创建一个名为SellProdAmount的存储过程,用于实现:由执行该存储过程时提供的商场的名称,查询其销售的产品数量,并用输出参数输出销量数。(使用“双桥子商场”和“十陵商场”两个商场名称执行程存储过程)use commoditysellgocreate procedure SellProdAmount 名称 varchar(10),数量 varchar(10) output asselect 数

14、量=SellAmout from EmporiumSellwhere EmpID=(select EmpID from EmporiumInfo where EmpName=名称 )execute GetFactProd '双桥子商场'execute GetFactProd '十陵商场'11、设计一个简单的AFTER INSERT触发器,这个触发器的作用是:在插入一条记录的时候,发出“又添加了一个学生的成绩”的友好提示。 先建立三个表:create table score(sno char(9),cno int,grade int)create table st

15、ock(prod_id char(10),prod_name varchar(10),unit_price int,stock_amount int,modified_date datetime)create table sell(order_id int identity(1,1),prod_id char(10),sell_amount int,sell_date datetime,Saler varchar(10)接着:create trigger add_sc on scoreafter insertas beginprint '又添加了一个学生的成绩'endinser

16、t into score values('20110523',23,50)12、在score表中创建触发器,在向score表中插入数据时,先检待插入的数据中的sno和cno是否存在于student表和sc表中,如果不存在则不允许插入。CREATE trigger add_sc2 on scoreafter insertas begin declare sno char(9) select sno=sno from student where sno=(select sno from inserted) if sno is null begin rollback transact

17、ion print '不存在这样的学生学号!' -raiserror('不存在这样的学生学号!',16,20) endendinsert into score values('20110523',13,80)USE commoditysellGOINSERT INTO score values('20110529',13,80)13、创建一个触发器,当删除student表中的数据时,需要判断该数据对应的学生是否有选课,如果有,也需要将其选课信息全部删除。 CREATE trigger del_stu on studentafter

18、 deleteas begin declare sno char(9) select sno=sno from score where sno=(select sno from deleted) if sno is not null begin delete from score where sno=sno print '该学生的选课记录也已经删除!' endendinsert into student values('20110526','李明','男',19,'计算机')delete from student

19、where sno='20110526'select * from score14、在score表上创建一个instead of insert触发器,实现:当向表score插入记录时检查分数的合理性,如果不合理就不进行插入操作,否则允许。CREATE trigger add_sc3 on scoreinstead of insertas begin declare grade int select grade=grade from inserted if grade<0 or grade>100 begin rollback transaction print &#

20、39;该学生的成绩不合理!' endendinsert into score values('20110525',13,-80)15、在score表上创建一个instead of delete触发器,实现:当从表score删除记录时检查各课程的成绩是否为空,如果为空就不允许进行删除操作,否则允许。USE commoditysellGOCREATE TRIGGER score_insert_deleteon scoreinstead of deleteas begin SET NOCOUNT ON declare sno char(9),cno int,grade int

21、select sno=sno,cno=cno,grade=grade from deletedif(grade is NULL)print '成绩为空,不允许删除该记录!' else delete from score where sno = sno and cno =cno end16、在score表上创建一个instead of update触发器,实现:当从表score更新记录时检查当前用户是否是dbo,如果不是dbo就不允许进行更新操作,否则允许。CREATE trigger delete_sc on scoreinstead of deleteas begin declare cj int select cj=grade from deleted if cj is null begin rollback transaction print '有课程成绩为空,不允许删

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论