数据库原理课程设计报告报告实验创建存储过程与触发器
存储过程及触发器实验报告
存储过程及触发器实验报告实验目的: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是我们想要创建的触发器的名称。
数据库 存储过程和触发器 实验报告
实验报告课程名称:数据库原理与应用上机实验名称:存储过程和触发器专业班级:计算机科学与技术1103 指导教师:卫凡学生姓名:贾梦洁学期:2013-2014学年第一学期实验报告课程名称数据库原理与应用实验名称存储过程和触发器姓名贾梦洁学号 201107010330专业班级计1103实验日期2013年12月5日成绩指导教师卫凡一、实验目的1.加深和巩固对存储过程和触发器概念的理解。
2. 掌握触发器的简单应用。
3. 掌握存储过程的简单应用。
二、实验环境硬件环境:PC机软件环境:操作系统为Microsoft Windows 2000或以上版本。
数据库管理系统为Microsoft SQL Server 2000标准版或企业版。
三、实验内容1. 熟悉运用SQL Server企业管理器和查询分析器进行存储过程的创建和删除。
2. 熟悉运用SQL Server企业管理器和查询分析器进行触发器的创建和删除。
四、实验步骤1.建立存储过程class_info ,当执行该过程时,只要给出学生的姓名,就能查到他们的班级名称。
使用存储过程class_info查找学生“张强”的信息。
2.删除存储过程 class_info3.使用触发器实现S,SC表的级联删除删除前:删除后:4.在数据库中创建一个触发器,当向S表中插入一条记录时,检查该记录的学号在S表中是否存在,如果有则不允许插入。
5.创建基于学生表的插入触发器,当向学生表插入一条记录时,返回一条信息:“欢迎新同学”。
6.为S表创建触发器s_insert,当向S表中插入数据时,要求学号必须以"2002"开头,否则取消插入操作。
五、实验总结这次的实验总体来说较前两次简单,因为很多题目都是书上的例题。
不过通过这次实验,也把上课没有认真听讲的部分给补上了。
至少让我不要在见到这些题目的时候觉得陌生,我觉得对我的数据库期末考试是有一定帮助的。
虽然数据库对我来说真的好苦手,但是我相信只要努力了总能做到的。
创建存储过程与触发器
创建存储过程与触发器存储过程和触发器是SQL Server中的两个非常重要的数据库对象。
它们能够帮助开发人员更好地组织和管理数据库中的数据和代码。
本文将为读者提供有关存储过程和触发器的详细介绍,包括如何创建和使用它们以及它们在数据管理中的作用。
一、创建存储过程存储过程是一组SQL语句的集合,可在一次执行中调用,以执行客户端请求的任务。
存储过程可以返回结果集,也可以不返回结果集。
下面是创建一个简单的存储过程的示例:CREATE PROCEDURE [dbo].[sp_GetOrders] ASBEGINSELECT * FROM [dbo].[Orders]END在这种情况下,存储过程被命名为sp_GetOrders,并且只包含一个SQL查询语句。
调用该存储过程后,将返回Orders 表中的所有行。
存储过程是可以通过参数传递值的。
下面是一个接受参数的存储过程的示例:CREATE PROCEDURE [dbo].[sp_GetOrderDetails] @OrderID int ASBEGINSELECT * FROM [dbo].[Orders] WHERE [OrderID] =@OrderIDEND在这种情况下,存储过程被命名为sp_GetOrderDetails,并且它接受一个参数,也就是OrderID。
调用该存储过程后,将只返回具有指定OrderID的订单的详细信息。
二、创建触发器触发器是可以在特定表上创建的一种特殊类型的存储过程。
它们会在指定的数据库表中的特定事件发生时自动触发。
下面是创建一个简单的触发器的示例:CREATE TRIGGER [dbo].[tr_InsertEmployee] ON[dbo].[Employees] FOR INSERT ASBEGININSERT INTO[dbo].[EmployeeAudit] ([EmployeeID], [Action], [ActionDate])SELECT [EmployeeID], 'Insert', GETDATE() FROM insertedEND在这种情况下,触发器被命名为tr_InsertEmployee,并在Employees表中的插入操作发生时自动触发。
存储过程和触发器(实验报告)
WITH ENCRYPTION AS
SELECT*
FROM student_info
WHERE性别='男'
EXEC stu_en
DROP PROCEDURE stu_en
4.使用grade表。
(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生各门课程的平均成绩。
CREATE PROC stu_g_r @stu_no varchar(8)=NULL,
@stu_score real OUTPUT
AS
SELECT@stu_score=AVG(分数)
FROM grade
WHERE (学号=@stu_no)
(2)执行存储过程stu_g_r,输入学号0002。
DECLARE @score real
WHERE (a.姓名=@stu_name)
EXEC stu_g_p ‘刘卫平’
sp_helptext stu_g_p
3.使用student_info表。
(1)创建一个加密的存储过程stu_en,查询所有男学生的信息。
(2)执行存储过程stu_en,查看返回学生的情况。
(3)使用Transact-SQL语句DROP PROCEDURE删除存储过程stu_en。
(3)掌握通过SQL Server管理平台和Transact-SQL语句Alter procedure修改存储过程的方法;
(4)掌握通过SQL Server管理平台和Transact-SQL语句Drop procedure删除存储过程的方法;
(5)掌握通过SQL Server管理平台和Transact-SQL语句Create trigger创建触发器的方法和步骤;
实验四MYSQL存储过程与触发器
实验四MYSQL存储过程与触发器实验四MYSQL存储过程与触发器实验平台:安装MYSQL数据库的PC实验目的:1.理解存储过程在数据库中的作用,能够针对MYSQL编写所需的存储过程。
2.理解触发器在数据库中的作用,能够针对MYSQL编写所需的触发器。
实验内容:1.掌握MYSQL中存储过程编写的方法并完成指导书上要求的相关实验。
2.掌握MYSQL中触发器编写的方法并完成级联更新、删除、及CHECK功能。
实验具体要求(在导入的教学管理STM数据库中完成):1、基本储存过程的创建①创建一存储过程get_student_num,利用输出参数形式获取学生人数信息。
并利用CALL调用该存储过程查看结果。
②创建一存储过程get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。
并利用CALL调用该存储过程查看结果。
③创建一存储过程update_sage_by_sno,通过输入学生编号、年龄作为参数,将指定学生的年龄更改为指定的年龄。
并利用CALL调用该存储过程查看结果。
④创建一存储过程delete_student_by_sno,通过输入学生编号作为参数,删除该学生记录。
并利用CALL调用该存储过程查看结果。
⑤创建一存储过程insert_student,通过输入相关信息作为参数,向学生表中添加一学生记录。
并利用CALL调用该存储过程查看结果。
2、基本函数过程的创建①创建一存储函数get_student_num,利用输出参数形式获取学生人数信息。
并利用select 调用该存储函数查看结果。
②创建一存储函数get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。
并利用select调用该存储函数查看结果。
3、利用SHOW CREATE {PROCEDURE | FUNCTION} sp_name 查看存储过程或函数的定义。
4、定义条件和处理①创建一存储过程insert_student_condition,利用条件定义,当主键重复时结束存储过程,并提示“学生主键重复”。
存储过程与触发器实验报告
存储过程与触发器实验报告一、引言存储过程和触发器是数据库中常用的高级功能,它们能够提高数据库的性能、数据一致性和安全性。
本实验报告将详细介绍存储过程和触发器的概念、用途以及实际应用。
二、存储过程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等操作,并在这些操作发生时自动触发执行一段预定义的代码。
实验7 创建和管理存储过程和触发器
实验7 创建和管理存储过程和触发器实验目的●了解存储过程的类型和作用,并掌握使用Transact-SQL语言创建存储过程的方法●理解触发器的特点和作用,并掌握使用Transact-SQL语言创建触发器的方法背景知识存储过程是一组为了完成特定功能的SQL语句和流程控制语句的集合,经编译后存储在数据库服务器中。
它在服务器端对数据库记录进行处理,再把结果返回到客户端。
使用存储过程,可以充分利用服务器端的速度和计算能力,同时也避免把大量的数据从服务器端下载到客户端,从而减少了网络的数据流量,服务器端只需要返回计算结果给客户端即可。
因此,对于客户端来说,可以不必关心后台数据结构的变化。
存储过程可分为两类:即系统存储过程和用户自定义存储过程。
系统存储过程主要存储在master 数据库中并以sp_为前缀,它主要是从系统表中获取信息,尽管这些系统存储过程被放在master数据库中,但是仍可以在其它数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。
而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。
触发器是一种特殊类型的存储过程,但它不等同于存储过程,主要区别在于触发器主要是通过事件进行触发而被执行的,当事件发生时触发器由SQL Server自动执行,而存储过程则是通过指定存储过程的名字并给出参数(如果该存储过程带有参数)而被直接调用的。
每个触发器有两个特殊的表:插入表(inserted)和删除表(deleted)。
这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此不允许用户直接对其修改。
这两个表的结构总是与被该触发器作用的表有相同的表结构。
这两个表是动态驻留在内存中的,当触发器工作完成,这两个表也被删除。
这两个表主要保存因用户操作而被影响到的原数据值或新数据值。
另外这两个表是只读的,即用户不能向这两个表写入内容,但可以引用表中的数据,例如可以使用“select * from deleted”语句来查看deleted表中的信息。
存储过程及触发器实验报告
数据库技术与应用实验报告七班级:机械因材学号: 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语句在执行被取消。
数据库原理 实验四 存储过程与触发器、函数
《数据库原理》实验报告题目:实验四 存储过程与触发器、函数 学号: 成 绩班级: 计算12 日期:2014.05 姓名: 指导老师:林颖贤一、实验目的:1、掌握创建存储过程的方法和步骤;2、掌握创建触发器的方法和步骤;3、掌握用户自定义函数的类型及使用方法。
二、实验使用环境:Windows 7 x64、SQL Server 2005三、实验内容与完成情况:1、增加一张库存表Inventoy,包括:商品编号、价格、库存数量、入库时间(默认值为系统时间)。
create table Inventory (Goo_no char (8) not null, Inv_num int null, Inv_date datetime not null, primary key (Goo_no ,Inv_date ));ALTER TABLE Inventory ADD CONSTRAINT Inv_datedefault getdate () for Inv_date ;select * from Inventory2、从Purchase (进货表)和Sell(销售表)中备份空记录表: PurchaseBak 和Sell1Bak 。
if (not exists(select name from sysobjects where name ='PurchaseBak')) ( select * into PurchaseBak from Purchase where (1=0))if (not exists(select name from sysobjects where name ='SellBak')) ( select * into SellBak from Sellwhere (1=0))3、创建一个触发器。
向进货表中插入一条记录时,这个触发器都将更新库存表。
如果库存有该类商品时,那么该商品的进价即为两次进价的平均值(因为每次的进价可能会不相同),库存量为原有库存加该次进货数量;(算法为:(库存商品进价*库存量+进货价*进货量)/(库存量+进货量);如果没有该商品,则插入到库存表中。
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)了解存储过程的概念(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 语句封装为一个可以重复调用的函数,使得程序更加简洁和高效。
实验八存储过程与触发器的应用实验报告
实验八:存储过程与触发器的应用实验报告实验任务:1、存储过程的创建、执行和删除。
(1)使用学生选课数据库中的student 表、course 表;sc 表创建一个带参数的存储过程—cjjicx 。
该存储过程的作用是:该存储过程的作用是:当任意输入一个学生的姓名时,当任意输入一个学生的姓名时,当任意输入一个学生的姓名时,将从三个表中返回该学生的学号、将从三个表中返回该学生的学号、将从三个表中返回该学生的学号、选选修的课程名称和课程成绩。
Cjjicx 的创建语句:create procedure [dbo].[cjjicx]@sname nchar (1010) ) asselect s .sno ,c .cname ,sc .gradefrom student as s inner join sc as sc on s .sno =sc .sno inner join course as c on c .cno =sc .cno wheresname =@sname(2)执行cjjicx 存储过程,查询“XXX XXX””(自己选个名字)的学号、选修课程和课程成绩。
执行语句:execute cjjicx '李勇'结果描述:(3)使用系统存储过程sp_helptext查看存储过程cjjicx的文本信息。
使用系统存储过程sp_depends查看存储过程cjjicx中所涉及的对象信息。
中所涉及的对象信息。
执行语句:执行语句:(i)EXEC sp_helptext cjjicx(ii)EXEC sp_depends cjjicx查看结果描述:查看结果描述:(i)(ii)(4)使用学生选课数据库中的student表,为其创建一个存储过程—jmxs。
该存储过程的作用是:当执行该存储过程时,将返回计算机系学生的所有信息。
是:当执行该存储过程时,将返回计算机系学生的所有信息。
Jmxs创建语句:创建语句:CREATE PROCEDURE jmxsASSELECTStudent.Sno,Student.Sname,Student.Ssex,Student.Sage,Student.Sdept FROM StudentWHERE Sdept='CS'GO结果描述:存储过程jmxs已成功建立:右侧“系统存储过程”下拉列表中显示(5)执行jmxs存储过程,查看计算机系学生的情况。
实验6 数据库实验——存储过程和触发器
实验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的结果。
数据库存储过程与触发器实验报告
南昌航空大学实验报告二00 年月日课程名称:数据库概论实验名称:数据库存储过程与触发器班级:122031 姓名:同组人:指导教师评定:签名:一、实验环境1.Windows2000或以上版本;2.SQLServer 2005。
二、实验目的熟悉不同数据库的存储过程和触发器,重点实践SQL Server2005,掌握SQL Server2005中有存储过程与触发器的相关知识。
三、实验要求完成实验指导书中p115-7和p132 -4。
四、实验步骤及参考源代码1.创建与执行存储过程create procedure C_P_Proc asselect distinct o,cna,pna,numfrom paper,customer,cpwhere o=o and paper.pno=cp.pno and cna='李涛' or cna='钱金浩' goexecute C_P_Proc2.删除存储过程drop procedure C_P_Proc3.创建插入触发器create trigger TR_PAPER_I ON PAKER12203125FOR INSERT ASDECLARE @appr floatDECLARE @apno intSELECT @appr=ppr,@apno=pno from insertedbeginif @appr<0 or @appr is nullbeginraiserror('报纸的单价为空或小于!',16,1)update paper set ppr=10where paper.pno=@apnoendend4.创建删除触发器create Trigger TR_PAPER_D on PAKER12203125after delete asdeclare @ipno char(6)declare @icount int;select @icount= count(*) from deleted,cpwhere deleted.pno=cp.pnoif @icount>=1beginselect @ipno=pnofrom deletedraiserror('级联删除cp表中的数据',16,1)delete from cp where cp.pno=@ipnoend5.创建修改触发器create trigger TR_PAPER_U ON PAKER12203125for update asdeclare @ippr floatselect @ippr=ppr from insertedif @ippr<0 or @ippr is nullbeginraiserror('输入单价不正确',16,1)rollback transactionend6. 分别对PAKER12203125表进行插入、修改、删除操作insert into PAKER12203125 (pno,pna,ppr)values('000006','江西日报','1') insert into PAKER12203125 (pno,pna,ppr)values('000007','江南都市报','15.5') delete from PAKER12203125 where pno='000001'update PAKER12203125 set ppr=12.5 where pno='000002'update PAKER12203125 set ppr=-2 where pno='000004'五、实验结果123.4.56六、实验体会试验过后,巩固了自己在课堂上所学的知识,并加深了记忆与了解,对以后的使用有很大作用在实验过程中,遇到一些困难,经过自己不断查找书籍并询问老师来解决问题,提高了自己的逻辑思维能力和动手能力。
存储过程与触发器实验报告
存储过程与触发器实验报告存储过程与触发器实验报告概述:本实验旨在探究数据库中存储过程与触发器的概念、作用以及使用方法。
通过编写实例代码并进行实验,深入理解存储过程与触发器在数据库管理系统中的重要性和应用场景。
一、存储过程存储过程是一组预定义的SQL语句集合,可以被多次调用。
存储过程通常用于执行一系列复杂的数据库操作,如数据的插入、更新、删除等。
它们可以被视为一种封装了业务逻辑的数据库对象,提供了更高效、更安全的数据处理方式。
在实验中,我首先创建了一个名为"AddEmployee"的存储过程,用于向员工表中插入新的员工信息。
该存储过程接受参数,包括员工姓名、性别、年龄等。
在存储过程中,我使用了INSERT INTO语句将参数值插入到员工表中。
通过调用该存储过程,可以方便地插入新员工的信息,减少了编写重复SQL语句的工作量。
二、触发器触发器是与数据库表相关联的特殊类型的存储过程,当表中的数据发生变化时,触发器会自动执行相应的操作。
触发器可以在数据的插入、更新、删除等操作前后触发,用于实现数据的自动验证、补充以及其他业务逻辑的处理。
在本次实验中,我创建了一个名为"UpdateStock"的触发器,用于在产品表中更新库存信息时自动更新库存变动记录表。
当产品表中的库存字段发生变化时,触发器会自动将相关信息插入到库存变动记录表中。
这样,无论是手动更新库存还是通过其他方式更新库存,库存变动记录都能够及时准确地被记录下来,方便后续的数据分析和追溯。
三、实验结果与总结通过本次实验,我深入学习了存储过程与触发器的概念、作用和使用方法。
通过编写实例代码并进行实验验证,我进一步认识到存储过程与触发器在数据库管理系统中的重要性和应用场景。
存储过程的使用可以提高数据库操作的效率和安全性,尤其适用于需要执行复杂业务逻辑的场景。
通过将一系列SQL语句封装成存储过程,可以减少网络传输的开销,提高数据库操作的性能。
数据库实验报告 之触发器和存储过程
(3)了解查看、执行、修改和删除存储过程的SQL语句的用法。
(4)了解查看、修改和删除触发器的SQL语句。
实验目的:
(1)掌握创建存储过程和触发器的方法和步骤。
(2)掌握存储过程和触发器的使用方法。
(3)掌握SQL Server 2005中数据库关系图的创建和管理。
③为S表创建一个名称为my_trig的触发器,当用户成功删除该表中的一条或多条记录时,触发器自动删除SC表中与之有关的记录。在S表中执行删除操作,验证触发器my_trig。
实验过程如下图所示:创建S表中的触发器:
验证触发器my_trig:
④创建一个名称为s_trig的触发器,当S表中的记录被更新时,显示表中所有的记录。验证触发器s_trig。
实验过程如下图所示:
验证触发器:
3.实验小结
实验总结:
(1)通过本次试验,对触发器和存储结构有了基本的了解,
(2)通过本次实验,了解了触发器的概念,掌握了触发器的创建及应用,存储过
程的创建及应用,查看触发器信息。
(3)对存储过程和触发器的使用方法以及SQL Server 2005中数据库关系图的创
建和管理。
实验步骤:在对象资源管理器窗口,点击可编程性,右击存储过程,点击新建存储过程,具体如下图所示:
④执行存储过程XSXK,查询“信息”系学生的学号、姓名、年龄、课程名、成绩。
实验步骤:在sql窗口输入如下代码:
exec xsxl ‘is’
点击执行,实验结果如下所示:
⑤使用系统存储过程查看存储过程XSXK的文本信息。
三:实验内容
(1)存储过程
①使用“学生-课程”数据库中的S表,创建一个不带参数的存储过程XS,查看学号为S1的学生的信息,包括该学生的学号、姓名、年龄。
数据库实验5 存储过程和触发器
实验五存储过程和触发器一、实验目的(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语句可永久地删除存储过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储过程与触发器实验日期和时间:2016 年 5 月13 日、星期五第节实验室:DJ2-信息管理实验室班级:学号:姓名:实验环境:1.硬件:笔记本电脑2.软件:SQL Server 2012实验原理:存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。
存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。
触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。
实验任务:此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。
如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。
假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。
以下列出参考的库表情况:根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表)1.★图书现有库存表。
作用:记录图书的现有库存情况。
至少包括:书号、书名、作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库存总量、库存位置等。
2.★读者信息表。
作用:记录读者信息。
至少包括:读者编号、证件类型、证件号码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地址、联系电话等。
3.★借书记录表。
作用:记录借书情况,以及是否归还。
至少包括:借阅ID(主键,可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、管理员编号……等。
4.★还书记录表。
作用:记录还书情况。
至少包括:还书ID(主键,可设置为自动编号)、书号、读者编号、归还数量、归还日期、是否超期(超过假设45天为超期)、超期天数、管理员编号……等。
(附:为简化操作,续借可视为归还后再借)。
5.管理员信息表。
作用:记录负责管理书库和借书还书工作的管理员信息。
至少包括:管理员编号、职工编号(在职工档案表中的职工编号)、用户名、密码、管理员级别等……。
6.职工档案表表。
作用:记录职工档案。
至少包括: 职工编号、姓名、性别、单位、职称、职务、出生日期、学历、……其它字段自拟。
7.入库单表。
作用:记录图书馆购买图书补充书库图书时的入库书单。
包括字段:入库单ID、入库日期、入库书号、书名、入库数量……其它请根据图书现有库存表自拟……经手人编号等。
实验步骤1、设计并创建数据库。
①)设计数据库,绘制ERD设计图。
②)根据ERD创建数据库中的所有表,并根据业务需求正确设置主键、外键、约束条件、默认值等。
③)创建关系图,建立表之间的联系以保证参照完整性。
注意,建表时,表中的外键的数据类型应当与其所参照的主表中的主键数据类型一致。
(至少创建题目所需要的表)④)基本数据录入。
可以直接录入,也可将其它格式的表中的数据导入,或查询其它表中可利用的数据并插入到现有的表中。
ERD设计图图书现有库存表PK书号书名作者简介类别价格出版社出版日期现有库存数最小库存量库存总量库存位置读者信息表PK读者编号证件类型证件号码姓名性别职业所属单位地址联系电话借书记录表PK借阅IDFK1书号FK2读者编号借阅数量借阅日期是否归还管理员编号还书记录表PK还书IDFK1书号FK2读者编号归还数量归还日期是否超期超期天数FK3管理员编号管理员信息表PK管理员编号FK1职工编号用户名密码管理员级别职工档案表PK职工编号姓名性别单位职称职务出生日期学历入库单表PK入库单ID入库日期入库书号书名入库数量经手人编号原代码:创建数据库、所有表,并根据业务需求正确设置主键、外键、约束条件、默认值create database图书管理系统;use图书管理系统;create table图书现有库存表(书号char(10)primary key,书名char(10)not null,作者char(10),简介varchar,类别char(10),价格money not null,出版社char,出版日期datetime,现有库存数int,最小库存量int,库存总量int,库存位置varchar default'3F45');create table读者信息表(读者编号nchar(10)primary key,证件类型nchar(4),证件号码nchar(13),姓名char(10),性别char(2)default'男',check(性别in('男','女')),职业char(4),所属单位char(8),地址char(10),联系电话char(11))create table借书记录表(借阅ID int identity(1,1)primary key,读者编号char(5),借阅数量int,借阅日期datetime default getdate(),是否归还char(2)default'否',书号char(10),管理员编号char(10),foreign key(书号)references图书现有库存表(书号),foreign key(管理员编号)references管理员信息表(管理员编号),);create table还书记录表(还书ID int identity(1,1)primary key,书号char(10),foreign key(书号)references图书现有库存表(书号),归还数量int,归还日期datetime default getdate(),是否超期char(2),超期天数char(5),管理员编号char(10),foreign key(管理员编号)references管理员信息表(管理员编号), );create table管理员信息表(管理员编号char(10)primary key,职工编号char(10),foreign key(职工编号)references职工档案表(职工编号),用户名char(10)not null,密码char(6)not null,管理员级别char(4));create table职工档案表(职工编号char(10)primary key,姓名char(10),性别char(2)default'男',check(性别='男'or性别='女'),单位char(10),职称char(4),职务char(10),出生日期datetime,学历char(10));create table入库单表(入库单ID char(10),入库日期datetime,入库书号char(10),书名char(10),入库数量int);关系图和数据录入情况、其它测试方案及数据:①创建可以按“书号”(参数)进行图书库存信息查询的存储过程。
②创建可以按“类别”(参数)进行某类图书库存信息查询的存储过程。
③创建可以按“读者编号”进行读者信息查询的存储过程。
④自拟题先在下面第一栏填写自己选择的题目和欲实现的功能,再在其余栏目中分别填写自己的代码以及执行情况、测试方案和数据、测试结果等等。
如果选做多个或全做或额外完成自拟题,请自己依照格式添加栏目,自拟题请写清题意。
我的存储过程选题:(描述题目和欲实现的功能)1.创建可以按“书号”(参数)进行图书库存信息查询的存储过程。
能够使得用户输入书号,就可以查询这本书的信息原代码:创建存储过程按照书号进行查询(ashcx),参数为shuhao 定义为char(20)create proc ashcx@shuhao char(20)asbeginselect*from图书现有库存表where书号=@shuhaoend调用存储过程,查询书号为‘30001’图书的信息exec ashcx@shuhao=30001测试方案及数据:创建存储过程,并查询书号为30001的图书信息exec ashcx@shuhao=30001测试结果:(文字说明、原代码、结果贴图)查询书号为3001书的信息①创建“借书记录”表的插入触发器,每插入一条借阅记录就自动根据借阅数量减少该图书的“现有库存数量”(图书现有库存表),图书数量不足时可以报警,图书数量为零时拒绝插入借阅记录。
②创建“还书记录”表的插入触发器,每当有读者归还图书时,插入一条还书记录,同时计算是否超期并在“是否超期”和“超期天数”字段填写结果。
并根据还书时提供的读者编号和书号,将“借书记录”表中的对应借阅记录的“是否归还”中原来的“否”置为“是”(注意考虑特殊情况,比如一本书由同一个读者反复多次借阅或一次借阅多本的);根据“归还数量”增加该图书的“现有库存数量”(图书现有库存表)。
③创建“入库单”表的插入触发器。
在该表中插入图书入库记录时,在填写“图书编号”和“入库数量”时,通过触发器的作用,能判断在“图书现有库存表”是否存在该图书的库存记录,如果有,则自动更新该图书的现有库存数量,如果现有库存表中不存在该图书的库存记录(有可能是原来没有的新书),则在“图书现有库存表”中自动插入该图书的库存记录。
对于书库中已经存在的图书(此次只是补充图书数量)能通过触发器的作用自动填写入库单该记录中其它的未填的该书的对应信息(提示,根据书号在图书现有库存表查询)。
④自拟题目。
先在下面第一栏填写自己选择的题目和欲实现的功能,再在其余栏目中分别填写自己的代码以及执行情况、测试方案和数据、测试结果等等。
如果选做多个或全做或额外完成自拟题,请自己依照格式添加栏目,自拟题请写清题意。
我的触发器选题:(描述题目和欲实现的功能)①创建“借书记录”表的插入触发器,每插入一条借阅记录就自动根据借阅数量减少该图书的“现有库存数量”(图书现有库存表),图书数量不足时可以报警,图书数量为零时拒绝插入借阅记录。
原代码:/*①创建“借书记录”表的插入触发器,每插入一条借阅记录就自动根据借阅数量减少该图书的“现有库存数量”(图书现有库存表),图书数量不足时可以报警,图书数量为零时拒绝插入借阅记录。
*/--use 图书管理系统alter trigger crcfqon借书记录表for insertasbegin--声明变量declare@zdbh int,@sh char(10),@dzbh char(5),@jysl int,@glybh char(10)declare@xykcs int--查询库存数量select@zdbh=inserted.借阅ID,@sh=inserted.书号,@dzbh=inserted.读者编号,@jysl=inserted.借阅数量,@xykcs=图书现有库存表.现有库存数from图书现有库存表join inserted on inserted.书号=图书现有库存表.书号if(@jysl<=@xykcs)begin--根据插入的销售记录的数量更新库存量update图书现有库存表set现有库存数=现有库存数-@jyslwhere@sh=书号endelsebeginprint'库存量不足!!!'rollback transactionendend测试方案及数据:在借书记录表中插入数据:借书记录表(书号,读者编号,借阅数量)values('30002','0001',1)在借书记录表中插入数据:借书记录表(书号,读者编号,借阅数量)values('30002','0001',55)测试结果:(文字说明、原代码、结果贴图)第一次插入数据:借书记录表(书号,读者编号, 借阅数量 )values('30002','0001',1)use图书管理系统select*from借书记录表goselect*from图书现有库存表goinsert into借书记录表(书号,读者编号,借阅数量)values('30002','0001',55)goselect*from借书记录表goselect*from图书现有库存表go第二次测试插入数据:借书记录表(书号,读者编号, 借阅数量 )values('30002','0001',55) 输出结果“库存量不足!!”use图书管理系统select*from借书记录表goselect*from图书现有库存表goinsert into借书记录表(书号,读者编号,借阅数量)values('30002','0001',55)goselect*from借书记录表goselect*from图书现有库存表go本实验总结:1.创建、修改、删除、调用存储过程的语法。