实验六 存储过程和触发器

合集下载

实验六存储过程和触发器

实验六存储过程和触发器

实验六存储过程和触发器实验六存储过程和触发器(2学时)1.实验目的(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。

(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。

(3)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。

(4)掌握引发触发器的方法。

(5)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。

2.实验内容(1)输入以下T-SQL代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。

CREATE PROCEDURE letters_printASDECLARE @count intSET @count=0WHILE @count<26BEGINPRINT CHAR(ASCII('a')+ @count)SET @count=@count +1END使用EXECUTE命令执行letters_print存储过程。

(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。

CREATE PROCEDURE stu_info @name varchar(40)ASSELECT a.no,name,cno,gradeFROM Student a INNER JOIN grade bON a.no= b.snoWHERE name= @name使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。

如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义?(3)使用student_db数据库中的Student表、course表、grade表。

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

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

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

实验6:存储过程和触发器

实验6:存储过程和触发器

序号:云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2015-2016学年第二学期任课教师:专业:学号:姓名:成绩:实验6 存储过程和触发器存储过程1、使用不带参数的存储过程(1)创建一个存储过程my_proc,查询“学生表”中所有计算机系女生的学号、姓名、性别、年龄和所在院系(2)执行存储过程2、带输入参数的存储过程(1)创建一个存储过程my_procsex,使其能够查询“学生表”中男学生或女学生(输入参数从这考虑)的学号、姓名、性别、年龄和所在院系(2)执行存储过程3、带输入/输出参数的存储过程(1)创建一个存储过程my_procage,使其能够根据学生姓名(输入),查询学生年龄(输出)。

(考虑当学生不存在时给出提示信息)(2)执行存储过程4、返回状态值的存储过程(1)创建一个存储过程my_procstatus,使其能够根据学生姓名,查询学生的选课信息。

(如果没有输入学生姓名,返回状态码55;如果输入的学生姓名不存在,则返回状态码-155)(2)执行存储过程:接收存储过程返回的状态码,如果返回的状态码为55则输出提示信息“没有输入名字!!”;如果返回的状态码为-155,则输出“没找到!!”。

(3)删除存储过程触发器1、使用触发器(1)创建一个触发器trig_update,返回对“学生表”进行更新操作后,被更新的记录条数(2)执行触发器(3)修改触发器trig_update,除返回被更新的记录条数外,再返回学生的所有基本信息2、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted)。

(1)在“学生表”上创建触发器ins_del_sample,在对学生表进行插入、删除或更新操作后,分别从inserted表和deleted表中查询学生学号、姓名、性别、年龄和所在院系。

(请同学们在做删除操作时,注意备份)(2)执行插入、删除和更新操作后返回的表有什么区别?3、使用系统存储过程查看触发器(1)显示触发器trig_update的一般信息(2)显示触发器trig_update的源代码(3)显示“学生表”上所有的依赖关系(4)显示触发器trig_update所引用的对象4、难题(注意inserted表和deleted表的使用,并请自己修改数据表)(1)为“成绩表”创建一个触发器,当向表中插入数据时,如果成绩大于等于60分,该学生就能得到相应的学分,否则,该学生不能得到学分。

实验六-存储过程与触发器

实验六-存储过程与触发器

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

实验六 触发器实验报告

实验六 触发器实验报告

实验六触发器实验报告一、实验目的本次实验的主要目的是深入理解触发器的工作原理和应用,通过实际操作和观察,掌握触发器在数字电路中的功能和特性。

二、实验原理触发器是一种具有记忆功能的基本逻辑单元,能够存储一位二进制信息。

常见的触发器类型有 SR 触发器、JK 触发器、D 触发器和 T 触发器等。

以 D 触发器为例,其工作原理是在时钟脉冲的上升沿或下降沿,将输入数据D 传递到输出端Q。

在没有时钟脉冲时,输出状态保持不变。

三、实验设备与材料1、数字电路实验箱2、 74LS74 双 D 触发器芯片3、示波器4、导线若干四、实验内容与步骤1、用 74LS74 芯片搭建 D 触发器电路将芯片插入实验箱的插座中,按照芯片引脚功能连接电源、地和输入输出引脚。

使用导线将 D 输入端连接到逻辑电平开关,将时钟输入端连接到脉冲信号源,将 Q 和 Q'输出端连接到发光二极管或逻辑电平指示器。

2、测试 D 触发器的功能置 D 输入端为高电平(1),观察在时钟脉冲作用下 Q 输出端的变化。

置 D 输入端为低电平(0),再次观察时钟脉冲作用下 Q 输出端的变化。

3、观察 D 触发器的异步置位和复位功能将异步置位端(PRE)和异步复位端(CLR)分别连接到逻辑电平开关,测试在置位和复位信号作用下触发器的状态。

4、用示波器观察时钟脉冲和 Q 输出端的波形将示波器的探头分别连接到时钟脉冲输入端和 Q 输出端,调整示波器的设置,观察并记录波形。

五、实验结果与分析1、在 D 输入端为高电平时,每当时钟脉冲的上升沿到来,Q 输出端变为高电平;在D 输入端为低电平时,每当时钟脉冲的上升沿到来,Q 输出端变为低电平,验证了 D 触发器的正常功能。

2、当异步置位端(PRE)为低电平时,无论其他输入如何,Q 输出端立即变为高电平;当异步复位端(CLR)为低电平时,Q 输出端立即变为低电平,表明异步置位和复位功能有效。

3、从示波器观察到的波形可以清晰地看到时钟脉冲与 Q 输出端的关系,进一步验证了触发器的工作特性。

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

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

数据库技术与应用实验报告七班级:机械因材学号: 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中创建的存储过程。

DELETE语句在执行被取消。

插入记录并显示:“sal不符合规定.无法插入此记录!”;在插入或修改教师表的数据”.要求触发触发器的DELETE、UPDATE语句被执行。

实验六触发器、存储过程编程实验

实验六触发器、存储过程编程实验

实验六触发器、存储过程编程实验一、实验目的学习存储过程和触发器的创建和使用方法。

二、实验环境硬件:PC机软件:SQL Server 2000三、实验原理1.触发器触发器是一种特殊的过程,它不带参数,不被用户和程序调用,只能由用户对数据库中的表的操作(插入、删除、修改)触发。

因此,可以利用触发器来维护表间的数据一致性。

触发器只能在表上建立,一张表最多可有3个触发器,即插入触发器、删除触发器、修改触发器,分别由插入、删除、修改操作触发。

触发器可以查询其它表,而且可以包含复杂的SQL语句。

它们主要用于强制复杂的业务规则及数据完整性。

⑴创建触发器创建触发器时需指定:●名称。

●在其上定义触发器的表。

●触发器将何时激发。

●激活触发器的数据修改语句。

有效选项为INSERT、UPDATE或DELETE。

多个数据修改语句可激活同一个触发器。

例如,触发器可由INSERT或UPDATE语句激活。

●执行触发操作的编程语句。

语法:CREATE TRIGGER 触发器名ON {表名| 视图名}{ FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT] [,] [UPDATE] }ASSQL语句块RETURN⑵使用inserted和deleted表触发器语句中使用了两种特殊的表:deleted表和inserted表。

Microsoft SQL Server2000 自动创建和管理这些表。

可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。

inserted 和deleted 表主要用于触发器中:●扩展表间引用完整性。

●在以视图为基础的基表中插入或更新数据。

●检查错误并基于错误采取行动。

●找到数据修改前后表状态的差异,并基于此差异采取行动。

Deleted表用于存储DELETE和UPDATE语句所影响的行的复本。

在执行DELETE 或UPDATE语句时,行从触发器表中删除,并传输到deleted表中。

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

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

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

一、实验原理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 语句封装为一个可以重复调用的函数,使得程序更加简洁和高效。

整理实验六-存储过程和触发器

整理实验六-存储过程和触发器

实验六存储过程和触发器整理表姓名:职业工种:申请级别:受理机构:填报日期:A4打印/ 修订/ 内容可编辑《大型数据库》课程教学大纲课程简介Microsoft SQL Server 2000是一个客户机/服务器关系型数据库系统,它使用Transact-SQL语言在客户机与SQL Server数据库服务器之间发送请求。

SQL Server 2000是Microsoft 公司推出的一个全新的数据库服务器产品,是一个企业级的网络关系型数据库管理系统,该产品拥有的种种新特性使它成为数据库服务器产品中的佼佼者,并且越来越得到广大用户的青睐。

SQL SERVER2000推出后广受欢迎.它使用了最先进的数据库构架,与windowsNT/2000平台紧密集成,具有完全的WEB功能,人们用它可方便地管理数据库和开发应用程序.它通过对高端硬件平台,网络和存储技术的支持,能在INTERNET商业领域快速建立应用.此外,还增强了安全性,支持基于角色的安全并拥有安全审计工具。

如果作为一般的程序应用,SQL SERVER2000是非常方便的,但要作为系统管理员,要掌握这样一个复杂而庞大的系统管理,需要进行大量的学习与实践.本课程在学生已初步掌握SQL SERVER 数据库对象的基础上,重点介绍SQL SERVER这一大型数据库的系统管理,为以后从事有关方面的工作打下良好的基础。

课程大纲一、课程的性质和任务:本课程作为计算机科学与技术的专业课程,主要任务是讲授如何使用SQL Server 2000 进行程序设计以及对数据库进行适当地管理。

通过理论指导和上机实践相结合的方式,使学生能熟练使用Transact-SQL语言并能进行简单编程;掌握保证数据完整性和数据安全性的技术;掌握数据库常规管理技术;了解客户端开发工具与大型数据库(SQL SERVER 2000)配合开发数据库应用系统的关键技术。

二、课程的目的与基本要求:1.了解SQL Server 2000的特点、组成等。

数据库实验-存储过程、触发器

数据库实验-存储过程、触发器
from SC
group by Sno
order by sum(Grade)desc
exec total
drop proc total
执行结果:命令已成功完成。
如图:
(3)创建存储过程,查找某门课的最高分(带输入参数的存储过程)。
代码:
create proc grade1
@Cname char(20)
石家庄经济学院
实验报告
学院:信息工程学院
专业:网络工程
信息工程学院计算机实验中心制
学号
411109030110
姓名
马立杰
实验日期
2014.5.12
实验室
260
指导教师
张有华
设备编号
实验内容
实验6存储过程、触发器
一实验题目
1.存储过程的定义和使用
2.触发器的创建与使用
二实验目的
1.掌握存储过程的定义、执行和调用方法。
如图:
(5)创建存储过程,统计某门课选修的人数,将人数返回。(带返回值的存储过程)
代码:
create proc proc1
@Cno char(10),
@number int output
as
select @number=count(*)
from SC
where Cno=@Cno
group by Cno
where Sno=
(select top 1 Sno from SC
group by Sno
order by count(*) desc)
exec proc2
drop proc proc2
执行结果:命令已成功完成。
如图:
2.触发器的创建与使用

实验6 游标、存储过程和触发器

实验6 游标、存储过程和触发器

实验六游标、存储过程与触发器
一、实验目的
掌握使用T-SQL实现游标、存储过程和触发器的创建,使用方法。

二、实验内容
在实验一、实验二创建的表中用T-SQL语句完成以下内容:
1.使用游标实现将及格的选课信息输出。

2.使用游标将SPJ表中的偶数行输出。

3.创建存储过程,查询赵永亮所修课程的课程信息,将课程号和课程名输出。

4.创建存储过程,统计指定学生修课的平均成绩和选课门数,将统计的结果用输出参数返回。

5.创建存储过程,在学生表Student中插入一条完整的元组。

6.创建存储过程,根据用户指定的供应商号删除SPJ表中相应的供货信息。

7.创建存储过程,将指定零件的重量增加指定的值。

8.用触发器实现约束:如果是北京的供应商,供应任何零件的数量不能少于300,如果少于则自动改为300。

9.在SC关系中增加新属性列Status,用来记录课程成绩的等级,0-59分为“不合格”,60-69为“合格”,70-89为“良好”,90以上为“优秀”。

要求status属性列的值由用户在插入、更新选课成绩时系统自动填写和更新。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验:存储过程与触发器

实验:存储过程与触发器

实验名称:存储过程与触发器实验目的:掌握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调用存储过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六存储过程和触发器
电子信息科学与技术罗滨志(120802010051)
一、实验目的
(1)理解存储过程和触发器的功能和特点;
(2)学会使用Transact-SQL编写存储过程和触发器的方法;
(3)学会如何使用管理平台创建存储过程和触发器;
(4)掌握存储过程的创建、执行与删除;
(5)掌握触发器的创建、修改和删除操作;
(6)理解可以使用存储过程和触发器来维护数据完整性。

二、实验准备
(1)了解存储过程的基本概念和类型。

(2)了解创建存储过程的Transact —SQL语句的基本语法。

(3)了解查看、执行、修改和删除存储过程的基本语法。

(4)了解触发器的基本概念和类型。

(5)了解创建触发器的Transact —SQL语句基本用法。

(6)了解查看、修改和删除触发器的Transact —SQL语句的用法。

三、实验内容和步骤
1.创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。

SQL语句
create proc stu_info@sname varchar(20)
as select grade
from sc,student
where student.sno=sc.sno and sname=@sname
go
如图所示:
2. 使用studentsdb数据库中的student表,course表、sc表。

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

SQL语句
create proc stu_score@sno varchar(20)
as select sname,cname,grade
from sc,student,course
where student.sno=sc.sno and o=o and student.sno=@sno go
如图所示:
(2)执行存储过程stu_score,查询2012001学生的姓名,课程名称,分数。

SQL语句
exec stu_score'200515001'
如图所示:
3. 使用student表,course表、sc表。

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

SQL语句
create proc stu_p_g@sname varchar(20)
as select student.sno,cname,grade
from sc,student,course
where student.sno=sc.sno and o=o and sname=@sname
go
如图所示:
(2)执行存储过程stu_g_p,查询“刘卫平”的学号,选修课程和课程成绩。

SQL语句
exec stu_p_g'李晨'
如图所示:
4.使用student表。

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

SQL语句
create procedure stu_en WITH ENCRYPTION AS select*
FROM student_info
WHERE性别='男'
EXEC stu_en
如图所示:
(2)使用Transact —SQL语句DROP PROCEDURE删除存储过程stu_en。

SQL语句
DROP procedure stu_en
如图所示:
5.使用sc表。

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

SQL语句
create proc stu_g_r@sno int,@stu_score int output
as
select@stu_score=AVG(grade)
from sc
where sno=@sno
如图所示:
(2)执行存储过程stu_g_r,输入学号2012002。

SQL语句
declare@stu_score int
exec stu_g_r'200515002',@stu_score output select@stu_score as平均成绩
如图所示:
(3)使用Transact—SQL语句DROP PROCDURE删除存储过程stu_en. SQL语句
DROP procedure stu_en
如图所示:
6.为sc表建立一个名为insert_g_tr的INSERT触发器,当用户向sc表中插入记录时,如果插入的是在course表中没有的课程编号,则提示用户不能插入记录,否则提示记录插入成功。

请进行插入测试,分别输入以下数据:
学号课程编号分数
2012003 003 76
2012111 009 69
观察插入数据时的运行情况,说明什么?
SQL语句
create trigger insert_g_tr
on sc
for insert
as
declare@cno char(20)
select@cno=cno from inserted
if not exists(select*from course)print'不能插入记录!'
else print'记录插入成功!'
go
如图所示:
7. 为course表创建一个名为del_c_tr的DELETE触发器,该触发器作用是如果在sc表中有该课程的记录则提示用户禁止删除course表中的记录,否则删除该课程记录并提示删除成功。

SQL语句
create trigger del_c_tr
on course
for delete
as
begin
declare@cno char(20)
if exists(select*from sc,deleted where o=o)
begin
print'禁止删除course表中的记录!'
rollback transaction
end
else
begin
select@cno=cno from deleted
delete from sc where cno=@cno
print'删除成功!'
end
end
go
如图所示:
8.为student表创建一个名为update_s_tr的UPDATE触发器,该触发器作用是如果sc表中有该学生的记录,则提示用户禁止更新student表中的“学号”字段的内容,否则更改用户学号,并提示更改成功。

SQL语句
create trigger update_s_tr
on student
for update
as
begin
declare@sno char(20)
if exists(select*from sc,updated where sc.sno=o)
begin
print'禁止更新!'
rollback transaction
end
else
begin
update sc
set sno=(select sno from inserted)
where sno=(select sno from deleted)
print'删除成功!'
end
end
go
如图所示:
11 .为course表创建一个名为update_sc的触发器,要求当修改course表的课程号时,sc表中相应的记录也自动修改。

SQL语句
create trigger update_sc
on Student
instead of update
as
if UPDATE(Grade)
begin
update SC
set Grade=(select Grade from inserted)where
Sno=(select Sno from inserted)and
Cno=(select Cno from inserted)
end
update Student
set Grade=40
where Sno='20110001'and Cno='002'
select*from Student
select*from SC
13.创建触发器,当修改或删除sc表中的成绩时,显示其原来的成绩。

SQL语句
create trigger test on s
after delete
as
begin
delete from sc where 学号in (select 学号from deleted)
end
Oracle:
create or replace trigger test
after delete on s
for each row
begin
delete from sc where 学号=:old.学号;
end;。

相关文档
最新文档