实验8 数据库的存储过程和触发器

合集下载

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

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

存储过程及触发器实验报告实验目的: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是我们想要创建的触发器的名称。

数据库设计中的存储过程与触发器

数据库设计中的存储过程与触发器

数据库设计中的存储过程与触发器数据库设计在软件开发中起着至关重要的作用,它决定着数据的结构、存储和访问方式。

在数据库设计中,存储过程和触发器是两个常用的技术,它们能够帮助我们更好地实现数据管理和处理的目标。

本文将重点探讨数据库设计中的存储过程与触发器,并介绍它们的作用、使用场景和优缺点。

一、存储过程存储过程是一组预编译的SQL语句集合,可以在数据库服务器上进行执行。

它们通常用于实现复杂的数据库操作、数据验证和业务逻辑。

存储过程可以被视为一种封装了的数据库操作,通过调用存储过程,我们可以实现统一的数据处理逻辑,提高代码的复用性和可维护性。

在数据库设计中,存储过程可以起到以下几个作用:1. 数据的一致性和完整性控制:存储过程可以通过在执行之前进行数据验证、规范化和自动修复,保证数据的一致性和完整性。

2. 事务管理:存储过程可以帮助我们实现复杂的事务处理,通过定义事务的边界、控制事务的提交和回滚,确保数据的一致性和可靠性。

3. 数据库性能优化:存储过程可以通过预编译和优化查询语句等技术手段,提高数据库的访问效率和响应速度。

存储过程的使用场景多样,例如在用户注册时进行用户名的唯一性验证,在订单提交时计算订单总价等。

然而,存储过程并非适合所有情况,它也存在一些缺点,如可移植性差、调试困难等。

因此,在使用存储过程时应权衡其利弊,并根据具体需求做出选择。

二、触发器触发器是与数据库表相关联的一种特殊对象,它在表上的插入、更新或删除操作时被自动触发执行。

触发器可以用于实现诸多数据库功能,如数据验证、派生数据和审计跟踪等。

触发器的主要作用如下:1. 数据验证和约束:触发器可以在插入、更新或删除数据之前进行数据验证和约束,确保数据的完整性和一致性。

2. 派生数据:通过触发器,可以自动计算和派生某些数据,避免手动计算和维护数据的复杂性。

3. 审计跟踪:触发器可以在数据操作时记录相关的变更信息,以实现审计和追踪功能,用于安全和合规需求。

数据库 存储过程和触发器 实验报告

数据库 存储过程和触发器 实验报告

实验报告课程名称:数据库原理与应用上机实验名称:存储过程和触发器专业班级:计算机科学与技术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语句集合,这些语句经过编译并且存储在数据库中,以便后续的重用。

存储过程可以接受参数,并且通过执行一系列SQL语句来实现复杂的操作。

存储过程的主要作用包括提高数据库的性能、减少网络流量、实现封装和重用性。

首先,存储过程可以提高数据库的性能。

当执行一组SQL语句时,存储过程会将这些语句一次性发送给数据库服务器,并且在服务器上进行预编译和优化。

相比于每次发送单独的SQL语句,存储过程能够减少网络往返的时间,提高执行效率。

其次,存储过程能够减少网络流量。

由于存储过程的执行过程在数据库服务器上完成,它只需要将执行结果返回给客户端,而不需要将整个SQL语句和数据传输回客户端。

这样不仅减少了网络传输的数据量,还减少了网络请求的次数,有效降低了网络流量。

此外,存储过程实现了封装和重用性的特点。

通过将一系列SQL语句封装在一个存储过程中,可以减少代码的重复性,提高代码的可维护性。

同时,存储过程可以在不同的应用程序中被调用,实现了代码的重用性,提高了开发效率。

在实际应用中,存储过程常用于完成复杂的业务逻辑。

例如,在某电商网站的订单系统中,存储过程可以用于完成下单流程的各个环节,包括生成订单、更新库存、计算订单总价等。

通过使用存储过程,可以确保这些操作的原子性,避免了在应用层面上进行多个SQL语句的事务管理。

另一个重要的数据库对象是触发器。

触发器是数据库中的一类特殊对象,它与表相关联,并且在特定的事件发生时自动执行一些操作。

触发器的主要作用包括数据完整性的维护、业务规则的实施以及数据审计等。

首先,触发器能够维护数据的完整性。

通过在数据操作之前或之后触发相应的操作,触发器可以保证数据库中的数据满足特定的约束条件。

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

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

存储过程与触发器实验报告一、引言存储过程和触发器是数据库中常用的高级功能,它们能够提高数据库的性能、数据一致性和安全性。

本实验报告将详细介绍存储过程和触发器的概念、用途以及实际应用。

二、存储过程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等操作,并在这些操作发生时自动触发执行一段预定义的代码。

《数据库技术》项目8 存储过程和触发器

《数据库技术》项目8 存储过程和触发器

无论是局部临时存储过程还是全局临时存储过程, 只要SQL Server一停止运行,它们将不复存在。
5
项目准备

远程存储过程
远程存储程序是位于远程服务器上的存储过程。

扩展存储过程
扩展存储过程是用户可以使用外部程序语言编写的存储 过程,扩展存储过程通常以xp_开头。扩展存储过程是 以动态链接库的形式存在,能让SQL 动态的装载和执行。 扩展存储过程一定要放在系统数据库master中。
26
项目8.2 触发器
27
项目8.2 触发器
28
项目8.2 触发器
任务1:创建触发器 任务2:删除触发器 项目练习
29
任务1:创建触发器
提出任务
1.创建一个触发器student_tri1,当对xs表执行增加、删 除或修改操作时触发该触发器,输出字符串“该操 作已执行”。 2.在数据库student的表xs上建立一个名为student_tri2 的DELETE触发器,该触发器将实现对表xs中删除记 录的操作给出警报,并取消当前的删除操作。
按位置传送参数值
在执行存储过程的语句中,不参照被传递的参数和直接给 出参数的传递值。当存储过程中含有多个输入参数时,传 递值的顺序必须与存储过程中定义的输入参数的顺序相一 致。
20
任务3:执行存储过程
提出任务 1.执行不带参数的存储过程student_proc1。 2.执行带参数的存储过程student_proc2。 分析任务 按照相关的T-SQL命令执行存储过程。

允许模块化程序设计 较好的安全机制 有效的降低网络流量 更高的执行效率
3
项目准备
3.存储过程的类型

系统存储过程

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

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

存储过程与触发器实验报告本实验旨在探究存储过程与触发器的概念、作用、使用范围和创建过程,并且通过编写相关的示例代码来展示它们的实际应用。

一、实验原理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. 引言数据库存储过程和触发器是数据库中常用的两种功能,它们可以通过在特定情况下自动执行一系列的操作,极大地提高了数据库系统的灵活性和功能性。

本文将介绍数据库存储过程和触发器的概念、作用和用法,并且以示例的方式详细展示它们在实际应用中的应用场景。

2. 数据库存储过程2.1 概念数据库存储过程是一组预定义的操作序列,它们以原子的方式执行,可以被多个应用程序调用。

存储过程通常用于处理复杂的业务逻辑、数据处理和数据验证等任务。

存储过程可以在数据库系统中被创建、编辑和执行,可以接受参数来灵活地适应不同的需求。

2.2 作用数据库存储过程具有以下几个重要的作用:•提高性能:存储过程在数据库服务器上执行,可以减少网络传输开销,提高数据库的响应速度。

•简化开发:存储过程将一些常用的操作封装起来,开发者可以通过简单的调用存储过程来完成复杂的业务逻辑,减少了开发工作量。

•保证数据的一致性:存储过程可以通过事务控制来确保数据的一致性和完整性。

2.3 用法数据库存储过程的用法如下:1.创建存储过程:使用CREATE PROCEDURE语句来创建存储过程,并定义输入参数、输出参数和过程体。

CREATE PROCEDURE procedure_name [ (parameter1, parameter2, ...)][RETURNS return_type]BEGIN-- 过程体END;2.执行存储过程:使用CALL语句来执行存储过程,并传递参数。

CALL procedure_name (parameter1, parameter2, ...);3.删除存储过程:使用DROP PROCEDURE语句来删除存储过程。

DROP PROCEDURE procedure_name;4.查看存储过程的定义:使用SHOW PROCEDURE STATUS语句来查看数据库中的存储过程。

SHOW PROCEDURE STATUS;3. 数据库触发器3.1 概念数据库触发器是与表相关联的特殊类型的存储过程,它们在表上的特定操作(插入、更新、删除)发生时自动执行。

实验八存储过程与触发器的应用实验报告

实验八存储过程与触发器的应用实验报告

实验八:存储过程与触发器的应用实验报告实验任务: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存储过程,查看计算机系学生的情况。

数据库编程技术——游标、存储过程与触发器

数据库编程技术——游标、存储过程与触发器

实验八数据库编程技术—游标、存储过程与触发器一、实验目的1.掌握游标的定义和使用方法2.掌握存储过程的定义、执行和调用方法3.掌握游标和存储过程的综合应用方法。

4.掌握触发器的创建和使用方法。

5.掌握游标和触发器的综合应用方法。

二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习第八章数据库编程的相关知识,完成如下的实验内容。

四、实验内容(1)利用游标查找所有女业务员的基本情况(2)创建一游标,逐行显示表customer的记录,要求按‘客户编号’+‘-------’+‘客户名称’+‘-------’+‘客户地址’+‘-------------------’+‘客户电话’+‘----------’+‘客户邮编’+‘--------’格式输出,并且用while 结构来测试游标的函数@@Fetch_Status的返回值。

(3)利用游标修改orderMaster表中的Ordersum的值(4)利用游标显示出orderMaster表中每一个订单所对应的明细数据信息。

(5)利用存储过程,给Employee表添加一条业务部门员工的信息。

(6)利用存储过程输出所有客户姓名、客户订购金额及其相应业务员的姓名(7)利用存储过程查找某员工的员工编号、订单编号、销售金额。

(8)利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金额(9)请使用游标和循环语句编写一个存储过程proSearchCustomer,根据客户编号,查询该客户的名称、地址以及所有与该客户有关的销售记录,销售记录按商品分组输出。

(10)设置一个触发器,该触发器仅允许dbo用户可以删除Employee表内数据,否则出错。

(11)在OrderMaster表中创建触发器,插入数据时要先检查Employee表中是否存在和Employee表同样值的业务员编号,如果不存在则不允许插入。

(12)级联更新:当更新customer表中的customerNo列的值时,同时更新OrderMaster表中的customerNo列的值,并且一次只能更新一行。

数据库的存储过程和触发器

数据库的存储过程和触发器

从MySQL5.0版本开始就对存储过程和触发器进行了支持,在MySQL进行学习前,先查看您所使用的版本吧,方法有:1.$mysql -V //linux终端下2.select version(); //mysql下3. mysql --help | grep Distrib //linux终端下在了解您所使用的版本支持情况下再下一步存储过程sql语句执行的时候要先编译,然后执行。

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。

用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

一、存储过程介绍存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。

存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。

Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。

它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix- 4GL语言一样。

这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序:1)、变量说明2)、ANSI兼容的SQL命令(如Select,Update….)3)、一般流程控制命令(if…else…、while….)4)、内部函数二、使用存储过程有以下的优点:* 存储过程的能力大大增强了SQL语言的功能和灵活性。

存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

* 可保证数据的安全性和完整性。

# 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。

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

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

存储过程与触发器实验报告存储过程与触发器实验报告概述:本实验旨在探究数据库中存储过程与触发器的概念、作用以及使用方法。

通过编写实例代码并进行实验,深入理解存储过程与触发器在数据库管理系统中的重要性和应用场景。

一、存储过程存储过程是一组预定义的SQL语句集合,可以被多次调用。

存储过程通常用于执行一系列复杂的数据库操作,如数据的插入、更新、删除等。

它们可以被视为一种封装了业务逻辑的数据库对象,提供了更高效、更安全的数据处理方式。

在实验中,我首先创建了一个名为"AddEmployee"的存储过程,用于向员工表中插入新的员工信息。

该存储过程接受参数,包括员工姓名、性别、年龄等。

在存储过程中,我使用了INSERT INTO语句将参数值插入到员工表中。

通过调用该存储过程,可以方便地插入新员工的信息,减少了编写重复SQL语句的工作量。

二、触发器触发器是与数据库表相关联的特殊类型的存储过程,当表中的数据发生变化时,触发器会自动执行相应的操作。

触发器可以在数据的插入、更新、删除等操作前后触发,用于实现数据的自动验证、补充以及其他业务逻辑的处理。

在本次实验中,我创建了一个名为"UpdateStock"的触发器,用于在产品表中更新库存信息时自动更新库存变动记录表。

当产品表中的库存字段发生变化时,触发器会自动将相关信息插入到库存变动记录表中。

这样,无论是手动更新库存还是通过其他方式更新库存,库存变动记录都能够及时准确地被记录下来,方便后续的数据分析和追溯。

三、实验结果与总结通过本次实验,我深入学习了存储过程与触发器的概念、作用和使用方法。

通过编写实例代码并进行实验验证,我进一步认识到存储过程与触发器在数据库管理系统中的重要性和应用场景。

存储过程的使用可以提高数据库操作的效率和安全性,尤其适用于需要执行复杂业务逻辑的场景。

通过将一系列SQL语句封装成存储过程,可以减少网络传输的开销,提高数据库操作的性能。

数据库设计实训8 存储过程和触发器的基本操作

数据库设计实训8 存储过程和触发器的基本操作
(3)创建一个存储过程求两个数之和(带返回参数)。
USE class_MIS
GO
CREATEPROCEDUREsump
@aINT, @bINT,@c intOUTPUT
AS
BEGIN
SET@c=@a+@b
END
(4)调用3题创建的存储过程计算120和30的和。
USE class_MIS
GO
DECLARE@sINT
OUTPUTsump120,30,@sOUTPUT
PRINT@c
GO
(5)查询3题创建存储过程的源代码。
USE class_MIS
GO
EXEC SP_HELPTEXT sum
GO
(6)删除1题创建的存储过程。
USE class_MIS
GO
DROP PROCEDURE sum
GO
2.创建与使用触发器
(1)为数据表student创建一个插入型触发器xk_ins_tri。
for delete
as
print '删除信息成功!'
go
(6)删除student表中学号为9905的学生信息,观察运行结果。
use xk
go
delete from student
where sno=9905
go
(7)重命名触发器xs_del_tri为xs_delete_tri。
use xk
go
exec sp_rename xs_del_tri , xs_delete_tri
(3)删除不需要的关系图。
右击需要删除的关系图,选择“删除”。
学生课外学习引导及作业布置
1.完成教材P159第(18)小题关于触发器的创建的工作。

实验8 数据库的存储过程和触发器

实验8 数据库的存储过程和触发器

韶关学院
学生实验报告册
实验课程名称:数据库技术与应用
实验项目名称:数据库的存储过程和触发器
实验类型(打√):(基础☑
设计
院系:教育学院专业班级:11教育技术学姓名:学号:
指导老师:林育曼
韶关学院教务处编制
一、实验预习报告内容
二、实验原始(数据)记录
实验时间:2013年12月16日(星期二第五六节)
三、实验报告内容
2.输入以下代码,创建存储过程的各科成绩。

(2)执行存储过程 stu_g_p,查询“刘卫平”的学号,选修课程和课程成绩。

号学生的平均成绩。

答:因为触发器规定若curriculum表中没有要插入的课程编号9、为curriculum表创建一个名为del_c_tr的DELETE触发器,
11、使用Transact-SQL语句DROP TRIGGER删除update_s_tr触发器。

注:1、如个别实验的实验报告内容多,实验报告册页面不够写,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。

2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。

实验:存储过程与触发器

实验:存储过程与触发器

实验名称:存储过程与触发器实验目的:掌握SQLSERVER存储过程与触发器的定义、调用操作数据库结构关系:语法规定:(1)存储过程定义语法:CREATE PROC 过程名@parameter 参数类型……@parameter 参数类型outputASBegin命令块End利用TSQL调用存储过程:Execute 过程名[参数值,……][Output]如果没有参数,直接调用过程名(2)创建事后触发器的语法:CREATE TRIGGER 触发器名ON 表名For Insert [,Update,Delete] AsBegin命令块End(3)创建替代触发器的语法:CREATE TRIGGER 触发器名ON 表名Instead of Insert [,Update,Delete] AsBegin命令块End实验内容:(一)存储过程(1)创建带输入参数的存储过程,输入查询的工资范围,输出查询到的职工信息Create proc Myproc1@mingzint,@maxgzintasselect * from 职工表where 工资between @mingz and @maxgz 调用该过程execute Myproc1 1000,4000(2)使用Transact-SQL语言创建带输入输出参数的存储过程。

输入仓库号,输出该仓库的职工信息、职工最高工资、最低工资Create proc Myproc2@cangkuhaovarchar(50),@maxgzint output,@avggzint outputasbeginselect * from 职工表where 仓库号=@cangkuhaoSelect @maxgz=max(工资) from 职工表where 仓库号=@cangkuhaoSelect @avggz=avg(工资) from 职工表where 仓库号=@cangkuhaoEnd调用存储过程。

数据库存储过程与触发器实验报告

数据库存储过程与触发器实验报告

南昌航空大学实验报告二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六、实验体会试验过后,巩固了自己在课堂上所学的知识,并加深了记忆与了解,对以后的使用有很大作用在实验过程中,遇到一些困难,经过自己不断查找书籍并询问老师来解决问题,提高了自己的逻辑思维能力和动手能力。

数据库存储过程与触发器

数据库存储过程与触发器

图8-5 用于传递班级编号的存储过程
8.1.3 修改与删除存储过程 在SQL Server中,可以通过企业管理器或SQL语句两种方式 修改或删除存储过程。 1.使用企业管理器修改存储过程 ①在企业管理器中,展开服务器组、服务器以及数据库节点。 ②选择某一个数据库,展开该数据库节点后点击【存储过 程】,在右侧的窗口中将会显示出存储过程的列表。右击需 要修改的存储过程,在弹出菜单中选择【属性】,弹出存储 过程属性对话框,如图8-6所示。
其中:
•存储过程名称 必须符合标识符命名规则,而且对于数据 库以及所有者命名必须唯一。一个完整的命名不能超过128 个字符。
【例8-1】使用CREATE PROCEDURE语句创建一个名称为 proc_bjrs的存储过程,用于检索现有班级及人数。 CREATE PROCEDURE proc_bjrs AS SELECT DISTINCT(班级表.班级编号),班级表.班级 名称, 人数=COUNT(学生基本信息表.学号) FROM 学生基本信息表,班级表 WHERE 班级表.班级编号=学生基本信息表.班级编 号 GROUP BY 班级表.班级编号,班级表.班级名称 GO 在查询分析器中执行以上命令后,然后执行该存储过 程EXECUTE proc_bjrs,运行结果如图8-4所示。
图8-4 检索现有班级以及人数
【例8-2】设计一个带有参数的存储过程,该参数用于传递班 级编号,根据该参数在学生基本信息表中检索出某一个班级 中所有学生的信息。
CREATE PROCEDURE proc_bjcx @bjbh VARCHAR(8) AS SELECT * FROM 学生基本信息表 WHERE 班级编号 =@bjbh GO 其中参数@bjbh用于接收班级编号,在实际调用中根据该 参数将会返回一个结果集。例如,EXECUTE proc_bjcx '20051003',将会显示班级编号为20051003的学生信息。 运行结果如图8-5所示

实验八存储过程与触发器(精)ppt课件

实验八存储过程与触发器(精)ppt课件

2roll的触发器 stud_grade_trigger4的语句
2020/4/23
13
四、实验小结
2020/4/23
14
实验八 存储过程与触发器
一、实验目的 1、理解存储过程和触发器的概念。 2、学会使用对象资源管理器和SQL编辑器创建存储
过程和触发器。 3、学会存储过程和触发器的管理方法。
二、实验准备 1、成功附加用户数据库studentml;
2020/4/23
1
三、实验内容与步骤
(1)针对学生基本信息表student,创建一个名称为 stud_proczhang的存储过程,该存储过程的功能是从 数据表student中查询所有姓张的学生信息;并写出 执行该存储过程的语句
20204213使用参数名传送参数值的方法来执行2中创建的存储过程courseprocinsert完成向数据表course中插入一条记录记录内容自己编写20204214使用按位置传送参数值的方法来执行courseprocinsert存储过程向数据表course中插入一条记录20204215基于表student新建一个名为studprocrenshu的存储过程其功能是输入两个日期型数据使用输出参数给出这两个出生日期之间的学生人数
2020/4/23
6
(6)删除前面(5)中创建的存储过程 stud_procrenshu 。
2020/4/23
7
(7)在student上创建一个stud_trigger1触发器, 当执行INSERT操作时,插入数据完成后,给出类似 于“插入成功”的提示信息。
2020/4/23
8
(8)在表enroll上建立一个名为 stud_grade_trigger4的触发器,该触发器将实现对 表enroll中删除记录的操作给出报警,并取消当前的 删除操作。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

韶关学院
学生实验报告册
实验课程名称:数据库技术与应用
实验项目名称:数据库的存储过程和触发器
实验类型(打√):(基础☑
设计
院系:教育学院专业班级:11教育技术学姓名:学号:
指导老师:***
韶关学院教务处编制
一、实验预习报告内容
二、实验原始(数据)记录
实验时间:2013年12月16日(星期二第五六节)
三、实验报告内容
2013年 12月 22日实验报告内容原则上应包含主要实验步骤、实验数据计算(实验操作)结果、实验结果(疑问)分析等项目。

实施内容:
一、根据实验要求完成实验:(写明步骤和截图)
0. 创建 studentsdb 数据库及其相应表,并录入数据。

启动查询
分析器,运行下面链接的代码即可。

创建数据库代码
1.在查询分析器中输入以下代码,创建一个利用流控制语句的存储过程 lletters_print,
该存储器能显示 26 个小写字母。

CREATE PROCEDURE letter_print
AS
DECLARE @count int
SET @count=0
WHILE @count<26
BEGIN
PRINT 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) AS
SELECT a.学号,姓名,课程编号,分数
FROM student_info a INNER JOIN grade ta
ON a.学号=ta.学号
WHERE 姓名=@name
使用 EXECUTE 命令执行存储过程 stu_info,其参数值为“马东”。

如果存储过程 stu_info 执行时没有提供参数,能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义?
画波浪线是因为批处理
3.使用 studentsdb 数据库中的 student_info 表,curriculm 表、grade 表。

(1)创建一个存储过程 stu_grade,查询学号为 0001 的学生的姓名,课程名称,分数。

(2)执行存储过程 stu_grade,查询 0001 学生的姓名,课程名称,分数。

(3)使用系统存储过程 sp_rename 将存储过程 stu_grade 更名为 stu_g.
原名放前,新名放后。

4.使用 student_info 表,curriculm 表、grade 表。

(1)创建一个带参数的存储过程 stu_p_g,当任意输入一个学生的姓名时,将从 3 个表中返回该学生的学号,选修的课程名称和课程成绩。

(2)执行存储过程 stu_g_p,查询“刘卫平”的学号,选修课程和课程成绩。

(3)使用系统存储过程 sp_helptext,查看存储过程 stu_p_g 的文本信息。

5.使用 student_info 表。

(1)创建一个加密的存储过程 stu_en,查询所有男学生的信息。

(2)执行存储过程 stu_en,查看返回学生情况。

(3)使用 Transact —SQL 语句 DROP PROCEDURE 删除存储过程 stu_en。

6.使用 grade 表。

(1)创建一个存储过程 stu_g_r,当输入一个学生学号,通过返回输出参数获取该学生各门课程的平均成绩。

(2)执行存储过程 stu_g_r,输入学号 0002。

(3)显示0002 号学生的平均成绩。

7、输入以下代码,复制student_info表命名为stu2,为stu2表创建一个触发器stu_tr,当stu2表插入一条记录时,为该记录生成一个学号,该学号为学号列数据的最大值加1。

--复制student_info表命名为stu2
SELECT * INTO stu2 FROM student_info
GO
--为stu2表创建一个INSERT型触发器stu_tr
CREATE TRIGGER stu_tr
ON stu2 FOR INSERT
AS
DECLARE @max char(4)
SET @max=(SELECT MAX(学号) FROM stu2)
SET @max=@max+1
UPDATE stu2 SET 学号=REPLICATE('0',4-len(@max))+@max
FROM stu2 INNER JOIN inserted on stu2.学号=inserted.学号
执行以上代码,查看studentsdb数据库中是否有stu2表,展开stu2,查看其触发器项中是否有stu_str 触发器。

在查询设计器的编辑窗口输入以下代码:
INSERT INTO stu2(学号,姓名,性别) VALUES('0001','张主','女')
运行以上代码,查看stu2表的变化情况,为什么插入记录的学号值发生了改变?
答:因为触发器中,设置要插入的学号为已插入数据中最大学号值+1,一旦插入就执行.
8、为grade表建立一个名为insert_g_tr 的INSERT触发器,当用户向grade表中插入记录时,如果插入的是在curriculum表中没有的课程编号,则提示用户不能插入记录,否则提示记录插入成功。

在进行插入测试时,分别输入以下数据:
学号课程编号分数
0004 0003 76
0005 0007 69
观察插入数据时的运行情况,说明为什么?
答:因为触发器规定若curriculum表中没有要插入的课程编号,则不允许插入,并回滚.
9、为curriculum表创建一个名为del_c_tr的DELETE触发器,该触发器的作用是禁止删除curriculum 表中的记录。

10、为student_info表创建一个名为update_s_tr的UPDATE触发器,该触发器的作用是禁止更新student_info表中的“姓名”字段的内容。

11、使用Transact-SQL语句DROP TRIGGER删除update_s_tr触发器。

注:1、如个别实验的实验报告内容多,实验报告册页面不够写,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。

2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。

相关文档
最新文档