存储过程和触发器(实验报告)
- 格式:doc
- 大小:160.50 KB
- 文档页数:10
存储过程及触发器实验报告实验目的: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是我们想要创建的触发器的名称。
数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。
2 实验平台:操作系统:Windows xp。
实验环境:SQL Server 2000以上版本。
3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。
1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。
存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。
存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。
'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。
如果没有该专业,则显示“无此专业”。
存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。
南昌航空大学实验报二0 一七年5月3日课程名称:数据库概论实验名称:存储器与触发器班级:XXX 姓名:XXX 同组人:指导教师评定:________________________________________ 签名:__________________一、实验环境1. Windows2000或以上版本;2. SQLServer2000 或2005。
二、实验目的1. 掌握存储过程的创建,修改,使用,删除;2. 掌握触发器的创建,修改,使用,删除。
三、实验步骤及参考源代码1.创建过程代码:CREATEPROCEDURI_P_Proc( @ccna varchar (10), @cnochar (4) OUTPU,T@cna varchar (10) OUTPU,T@pnavarchar (20) OUTPU,T@numint OUTPUTASSELECT@cna=cna, @cno=cp. cno, @pna=pna, @num=numFROMcp , customer , paperWHEREcustomer . cno=cp. cno ANDpaper . pno=cp. pno ANDcna =@ccna;6.执行存储过程C_P_Pro,实现对李涛,钱金浩等不同顾客的订阅信息查询execute C_P_Proc @nam=e' 李涛'execute C_P_Proc @nam=e' 钱金浩'7,删除存储过程C_P_PrccDROPPROCEDURCE_P_PROC(4)在DingBao数据库中针对PAPER创建插入触发器TR_PAPER_I删除触发器TR_PAPER_D修改触发器TR_PAPER_J具体要求如下。
<1>对PAPER的插入触发器:插入报纸记录,单价为负值或为空时,设定为10 元。
CREATE TRIGGER TR_PAPER_I ON paperFOR INSERT ASDECLARE @ippr FLOAT;declare @ipno int;SELECT @ippr=ppr,@ipno=pno from insertedbeginif @ippr<0 or @ippr is NULLbeginraiserror(' 报纸的单价为空或小于零!',16,1)update paper set ppr=10where paper.pno=@ipnoendendINSERTINTO paper ( pno, pna, ppr ) VALUES( '000007' ,' 青年报' ,- 2)select * from paper<2>对PAPER勺删除触发器:要删除的记录,若正在被订阅表CP参照时,级联删除订阅表中相关的订阅记录。
实验九存储过程和触发器实验内容在已建立的TSGL数据库的基础上,按如下要求对数据库进行操作,按同前的命名要求保存操作代码和截图。
1. 利用TSGL数据库中的TREADER表和TBOOK表和historytable表,编写一无参存储过程用于查询每个读者的借阅历史,然后调用该存储过程。
2. 编写一存储过程,根据TSGL数据库的三个表查询指定读者(指定借书证号或指定姓名等)当前的借书情况。
3. 利用TSGL数据库中的TREADER表、TBOOK表及historytable表创建一存储过程,查询指定图书(ISBN或书名)的借阅历史。
该存储过程在参数中使用模糊查询,如果没有提供参数,则使用预设的默认值。
4. 编写一存储过程,统计指定图书在给定时间段内的借阅次数,存储过程中使用输入和输出参数。
5. 编写一存储过程,在TSGL数据库的TREADER表上声明并打开一个游标。
通过游标读取所需信息。
6. 创建加密过程,使用sp_helptext系统存储过程获得关于加密的存储过程的信息,然后尝试直接从syscomment表中获取关于该过程的信息。
7. 对TSGL数据库中的三个表分别创建添加、修改、删除一条记录的存储过程。
8. 创建触发器,当向LEND表中插入一条记录时,将TREADER表中该学生的借书数加1,将TBOOK表中该书的库存量减1。
9. 创建触发器,当修改TREADER表中的借书证号时,同时也要将LEND表中的借书证号修改成相应的借书证号(假设TREADER表和LEND表之间没有定义外键约束)10. 在删除TREADERB表中的一条生记录时将LEND表中该学生的相应记录也删除。
11. 在数据库TSGL中创建一触发器,当向lend表插入一条记录时,检查该记录的借书证号在TREADER表中是否存在,检查图书的ISBN在TBOOK表中是否存在,以及图书的库存量是否大于0,若有一项为否,则不允许插入。
12. 在数据库TSGL中创建一触发器,当删除TREADER表一条记录时,检查该记录的借书证号在JY表中是否存在,如果存在,则不允许删除。
实验六存储过程和触发器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等操作,并在这些操作发生时自动触发执行一段预定义的代码。
数据库技术与应用实验报告七班级:机械因材学号: 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语句在执行被取消。
存储过程、触发器和用户自定义函数实验实验内容一练习教材中存储过程、触发器和用户自定义函数的例子。
教材中的BookSales数据库,在群共享中,文件名为BookSales.bak。
实验内容二针对附件1中的教学活动数据库,完成下面的实验内容。
1、存储过程(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。
执行存储过程:exec countpeople(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。
执行存储过程:exec avg_score'C602'(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。
执行存储过程:exec alterscore(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。
执行存储过程:exec select_courses'李强'(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。
执行存储过程:declare@score smallintexec select_socre'98601','C602',@score outputprint'成绩是'+convert(char(2),@score)+'分'2、触发器(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。
创建完触发器尝试进行更新数据:update study set score=60 where sno='98601'and cno='C601'执行完之后查询结果发现成绩仍然是90select score from study where sno='98601'and cno='C601'再更新一个高于90分的成绩则可以成功update study set score=91 where sno='98601'and cno='C601'select score from study where sno='98601'and cno='C601'(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。
实验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表中。
触发器可以使用这两个临时表测试数据修改的效果及设置触发器操作的条件。
触发器具有以下优点:●触发器可通过数据库中的相关表实现级联更改。
北华航天工业学院《数据库系统管理》实验报告报告题目:存储过程、触发器的创建于管理所在系部:计算机科学与工程系所在专业:网络工程专业学号:姓名:教师姓名:完成时间:2011 年10 月19 日北华航天工业学院教务处制存储过程、触发器的创建与管理一、实验目的1、掌握存储过程的概念、优点、特点及用途;2、掌握创建、执行、查看、修改和删除存储过程的方法;3、了解触发器和一般存储过程的区别、概念及优点;4、掌握创建、查看、修改和删除触发器的方法。
二、实验内容(一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。
(二)练习创建和管理存储过程1、使用管理控制台创建一个名为“计算机系借阅信息_PROC”的无参存储过程,要求显示计算机系读者2011-1-1以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段,并执行该存储过程,查看显示结果。
2、使用T-SQL语句创建一个名为“读者借阅信息_PROC”的带参数的存储过程,要求根据输入的读者的编号显示读者的所有借阅信息,包括“读者编号”、“姓名”、“系部”、“图书编号”、“图书名称”和“借阅日期”等字段,并执行该存储过程,查看显示结果。
create proc读者借阅信息_PROC1@dzbh char(10)asbeginselect tb_reader.读者编号,姓名,系部,tb_book.图书编号,书名,借阅日期from tb_book,tb_reader,tb_borrowwhere tb_book.图书编号=tb_borrow.图书编号and tb_reader.读者编号=tb_borrow.读者编号and tb_reader.读者编号=@dzbhend--declare @srcs char(10),@fhzt intset @srcs='R10009'exec @fhzt=读者借阅信息_PROC1 @srcsprint'执行状态值为'+cast(@fhzt as varchar(10))3、使用T-SQL语句创建一个名为“图书借阅信息_PROC”的带参数的存储过程,要求根据输入的图书编号计算该图书的借阅数量,并根据程序执行结果返回不同的值,执行成功返回0,不成功返回错误号,并执行该存储过程,输出图书编号、借阅数量和程序结果返回值。
实验六存储过程和触发器142208100149 陈聪1、目的与要求(1)掌握存储过程的使用方法。
(2)掌握触发器的使用方法。
2、实验准备(1)了解存储过程的使用方法。
(2)了解触发器的使用过程。
(3)了解inserted逻辑表和deleted逻辑表的使用。
(4)了解如何编写CRL存储过程与触发器。
3、实验内容。
(1)存储过程。
①创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程。
注:此段T-SQL命令,书上变量名书写错误,漏掉了下划线。
(@nu_MBER1和@nu MBER1区别)执行该存储过程,并查看结果。
②创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1.执行该存储过程并查改结果。
③创建添加职员记录的存储过程EmployeeAdd。
执行该存储过程。
执行上面T-SQL命令,在结果栏中显示一行受影响,说明结果已经插入成功,在表Employees中也够看到结果已经存在。
④创建存储过程,使用游标确定一个员工的实际收入是否排在前3名。
结果为1表示是,结果为0表示否。
执行该存储过程,在结果栏中显示,命令已成功完成,并且在左侧对象资源管理器中进行刷新会显示刚刚创建的存储过程。
执行该存储过程:上面T-SQL结果中输出“1”,代表着员工“108991”的实际收入排在前三名。
【思考与练习】A、创建存储过程,要求当一个员工的工作年份大于6年时,将其转到经理办公室工作。
创建这个存储过程时候,在存储过程的条件判断中我添加了一项,判断工作年份在6年以上的员工是否在经理办公室,只有不在经理办公室的时候才进行调整,这样更符合实际问题些。
然后执行上面的存储过程,并且查看结果:此时有可能会出现(我就出现了)这样的问题,在之前实验三中就出现了。
解决方法同样是解除规则的绑定。
查看表Employees中员工“000001”的DepartmentID已经修改为“3”(经理办公室)。
信息工程学院实验报告课程名称:《数据库原理》实验项目名称:存储过程与触发器一、实验目的:(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表中查询此学生的信息。
存储过程与触发器实验报告本实验旨在探究存储过程与触发器的概念、作用、使用范围和创建过程,并且通过编写相关的示例代码来展示它们的实际应用。
一、实验原理1. 存储过程存储过程是一组预定义好的 SQL 语句,可以重复使用并且可以直接被调用。
它类似于程序中的函数,可以接受参数、返回值、流程控制等。
2. 触发器触发器是与数据库表相关的事件响应机制,可以在数据库表上定义一些触发条件,当满足这些条件时就会触发执行一些操作,比如插入、更新或删除数据。
二、实验步骤1. 存储过程的创建与使用(1)创建一个用于统计某个用户的订单数量的存储过程。
```DELIMITER //CREATE PROCEDURE `getOrderCount`(IN p_userid INT, OUTp_count INT)BEGINSELECT COUNT(*) INTO p_count FROM orders WHERE user_id = p_userid;END//DELIMITER ;```(2)调用这个存储过程,并输出结果。
```CALL getOrderCount(123, @count);SELECT @count AS 'order_count';```2. 触发器的创建与使用(1)创建一个在用户表中插入新记录时自动生成一个账户记录的触发器。
```DELIMITER //CREATE TRIGGER `insert_user_account` AFTER INSERT ON `users` FOR EACH ROWBEGININSERT INTO accounts (user_id, balance) VALUES (NEW.id, 0);END//DELIMITER ;```(2)在用户表中插入一条新记录,触发器会自动执行并在账户表中生成一条新记录。
```INSERT INTO users (name, email) VALUES ('Alice','***************');SELECT * FROM accounts WHERE user_id =LAST_INSERT_ID();```三、实验结论通过实验我们发现,存储过程可以将一些常用的 SQL 语句封装为一个可以重复调用的函数,使得程序更加简洁和高效。
实验7 存储过程和触发器的使用1.存储过程①创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程USE YGGLGOCREATE PROCEDURE TEST@NU MBER int OUTPUTASBEGINDECLARE@NU MBER2inTSET@NU MBER2=(SELECT COUNT(*)FROM Employees)SET@NU MBER1=@NU MBER2END②创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1 BEGINDECLARE@SR1float,@SR2FLOATSELECT@SR1=InCome-OutCome FROM Salary WHERE EmployeeID=@ID1SELECT@SR2=InCome-OutCome FROM Salary WHERE EmployeeID=@ID2IF@ID1>@ID2SET@BJ=0ELSESET@BJ=1END③创建添加职员记录的存储过程EmployeeAddUSE YGGLGOCREATE PROCEDURE EmployeeAdd(@employeeid char(6),@name char(10),@education char(4),@birthday datetime, @woekyear tinyint,@sex bit,@address char(40),@phonenumber char(12),@departmentID char(3))ASBEGININSERT INTO EmployeesVALUES(@employeeid,@name,@education,@birthday,@woekyear,@sex,@address,@phonenumber,@departmentID)ENDRETURNGO④创建带有OUTPUT游标参数的存储过程,在Employees表中声明并打开游标USE YGGLGOCREATE PROCEDURE em_cursor@em_cursor cursor VARYING OUTPUTASBEGINSET@em_cursor=CURSOR FORWARD_ONLY STATICFORSELECT*FROM EmployeesOPEN@em_cursorENDGO⑤创建存储过程,使用游标确定一个员工的实际收入是否排在前三名,结果为1表示是,结果为0表示否REATE PROCEDURE TOP_THREE@EM_ID char(6),@OK bit OUTPUTASBEGINDECLARE@X_EM_ID char(6)DECLARE@ACT_IN int,@SEQ intDECLARE SALARY_DIS cursor FORSELECT EmployeeID,InCome_OutComeFROM SalaryORDER BY InCome_OutCome DESCSET@SEQ=0SET@OK=0OPEN SALARY_DISFETCH SALARY_DIS INTO@X_EM_ID,@ACT_INWHILE@SEQ<3 AND@OK=0BEGINSET@SEQ=@SEQ+1IF@X_EM_ID=@EM_IDSET@OK=1FETCH SALARY_DIS INTO@X_EM_ID,@ACT_INENDCLOSE SALARY_DISDEALLOCATE SALARY_DISEND2.触发器①向Employees表插入或修改一个记录时,通过触发器检查记录的DpartmentID值在Dpartments表中是否存在,若不存在,则取消插入或修改操作USE YGGLGOCREATE TRIGGER EmployeesIns ONFOR INSERT,UPDATEASBEGINIF((SELECT DepartmentID from inserted)NOT IN(SELECT DepartmentID FROM DepartmentS))ROLLBACKEND②修改Dpartments表“DpartmentID”字段值时,该字段在Employees表中对应的值也做相应修改USE YGGLUSE YGGLGOCREATE TRIGGER DepartmentUpdate ONFOR UPDATEASBEGINUPDATE EmployeesSET DepartmentID=(SELECT DepartmentID FROM insered)WHERE DepartmentID=(SELECT DepartmentID FROM deleted)ENDGO③删除Dpartment表中记录的同时删除该记录“DpartmentID”字段值在Employees表中对应的记录CREATE TRIGGER DepartmentsDelate ONFOR DELETEASBEGINDELETE FROM EmployeesWHERE DepartmentID=(SELECT DepartmentID FROM deleted)ENDGO④创建INSTEAD OF 触发器,当向Salary表中插入记录时,先检查EmployeeID列上的值在Employees中是否存在,如果在则执行插入操作,如果不存在,则提示“员工号不存在”CREATE TRIGGER EM_EXISTS ON SalaryINSTEAD OF INSERTASBEGINDECLARE@EmployeeID char(6)SELECT@EmployeeID=EmployeeIDFROM insertedIF(@EmployeeID IN(SELECT EmployeeID FROM Employee))INSERT INTO Salary SELECT*FROM insertedELSEPRINT'员工号不存在'END⑤创建DDL触发器,当删除YGGLXJ数据库的一个表时,提示“不能删除表”,并回滚删除表的操作USE YGGLGOCREATE TRIGGER table_deleteON DATABASEAFTER DROP_TABLEASPRINT'不能删除该表'ROLLBACK TRANSACTION。
实验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 addresult1n 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 addresult2n 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的结果。
存储过程与触发器实验报告存储过程与触发器实验报告概述:本实验旨在探究数据库中存储过程与触发器的概念、作用以及使用方法。
通过编写实例代码并进行实验,深入理解存储过程与触发器在数据库管理系统中的重要性和应用场景。
一、存储过程存储过程是一组预定义的SQL语句集合,可以被多次调用。
存储过程通常用于执行一系列复杂的数据库操作,如数据的插入、更新、删除等。
它们可以被视为一种封装了业务逻辑的数据库对象,提供了更高效、更安全的数据处理方式。
在实验中,我首先创建了一个名为"AddEmployee"的存储过程,用于向员工表中插入新的员工信息。
该存储过程接受参数,包括员工姓名、性别、年龄等。
在存储过程中,我使用了INSERT INTO语句将参数值插入到员工表中。
通过调用该存储过程,可以方便地插入新员工的信息,减少了编写重复SQL语句的工作量。
二、触发器触发器是与数据库表相关联的特殊类型的存储过程,当表中的数据发生变化时,触发器会自动执行相应的操作。
触发器可以在数据的插入、更新、删除等操作前后触发,用于实现数据的自动验证、补充以及其他业务逻辑的处理。
在本次实验中,我创建了一个名为"UpdateStock"的触发器,用于在产品表中更新库存信息时自动更新库存变动记录表。
当产品表中的库存字段发生变化时,触发器会自动将相关信息插入到库存变动记录表中。
这样,无论是手动更新库存还是通过其他方式更新库存,库存变动记录都能够及时准确地被记录下来,方便后续的数据分析和追溯。
三、实验结果与总结通过本次实验,我深入学习了存储过程与触发器的概念、作用和使用方法。
通过编写实例代码并进行实验验证,我进一步认识到存储过程与触发器在数据库管理系统中的重要性和应用场景。
存储过程的使用可以提高数据库操作的效率和安全性,尤其适用于需要执行复杂业务逻辑的场景。
通过将一系列SQL语句封装成存储过程,可以减少网络传输的开销,提高数据库操作的性能。
第1部分实验8 存储过程和触发器1.实验目的(1)掌握通过SQL Server 管理平台和Transact-SQL 语句CREA TE PROCEDURE 创建存储过程的方法和步骤。
(2)掌握使用Transact-SQL 语句EXECUTE 执行存储过程的方法。
(3)掌握通过SQL Server 管理平台和Transact-SQL 语句ALTER PROCEDURE 修改存储过程的方法。
(4)掌握通过SQL Server 管理平台和Transact-SQL 语句DROP PROCEDURE 删除存储过程的方法。
(5)掌握通过SQL Server 管理平台和Transact-SQL 语句CREA TE TRIGGER 创建触发器的方法和步骤。
(6)掌握引发触发器的方法。
(7)掌握使用SQL Server 管理平台或Transact-SQL 语句修改和删除触发器。
2.实验内容及步骤(1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程letters_print ,该存储过程能够显示26个小写字母。
CREATE PROCEDURE letters_print ASDECLARE @count int SET @count=0 WHILE @count<26 BEGINPRINT CHAR(ASCII('a')+ @count) SET @count=@count +1 END单击查询分析器的“执行查询”按钮,查看studentsdb 数据库的存储过程是否有letters_print 。
使用EXECUTE 命令执行letters_print 存储过程。
(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。
CREATE PROCEDURE stu_info @name varchar(40)ASSELECT a.学号,姓名,课程编号,分数FROM student_info a INNER JOIN grade taON a.学号= ta.学号WHERE 姓名= @name使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。
实验五存储过程和触发器一、实验目的(1) 通过实践理解存储过程和触发器的概念、作用及优点;(2) 掌握存储过程的定义与调用,实现存储过程中带有不同参数的应用;(3) 掌握创建触发器。
二、实验原理1.存储过程一个被命名的存储在服务器上的T-SQL语句的集合,是封装重复性工作的一种方法。
(1)创建存储过程CREATE PROC[DURE]PROCDURE_NAME [{@PARAMENT DATA_TYPE}[VARYING][=DEFAULT][OUTPUT]] [, (1)AS SQL_STATEMENTPROCEDURE_NAME:新存储过程的名称,必须符合标识符规则且唯一。
@PARAMETER:过程中的参数。
可以声明一个或多个参数。
用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。
使用 @ 符号作为第一个字符来指定参数名称。
参数名称须符合标识符规则。
每个过程的参数仅用于该过程本身;相同的参数名称可用在其它过程中。
默认情况下参数只能代替常量,不能代替表名、列名或其它数据库对象名称。
DATA_TYPE:参数的数据类型。
DEFAULT:参数的默认值。
如果定义了默认值,不必指定该参数的值即可执行过程。
默认值必须是常量或 NULL。
OUTPUT:表明参数是返回参数。
该选项的值可以返回给 EXEC[UTE]。
使用 OUTPUT 参数可将信息返回给调用过程。
(2)执行存储过程SQL SERVER系统中,可以使用EXECUTE语句执行存储过程。
EXECUTE语句也可以简写为EXEC。
如果将要执行的存储过程需要参数,那么应该在存储过程名称后面带上参数值。
[EXEC[UTE]]{[@RETURN_STATUS=]{PROCEDURE_NAME[;NUMBER]|@PROCEDURE_NAME_VAR}[@PARAMETER={VALUE|@VARIABLE[OUTPUT]|[DEFAULT]}[,…N](3) 删除存储过程使用DROP PROCEDURE语句可永久地删除存储过程。