存储过程、触发器和函数实验

合集下载

计算机软件及应用数据库函数存储过程触发器数据库安全的实验

计算机软件及应用数据库函数存储过程触发器数据库安全的实验

实验十函数一、实验目的与要求⏹理解什么是标量函数、内嵌表值函数及多语句表值函数。

⏹熟练掌握标量函数、内嵌表值函数、多语句表值函数的定义和调用。

⏹基表如下所示:⏹二、实验内容和步骤1、函数的定义对于CPXS数据库,定义完成如下功能的函数:(1)据产品名称,查询该产品的相关信息;(函数名为FU_CP)use cpxs1gocreate function FU_CP(@productname char(30))returns tableasreturn(select * from CPXSB right join XSS on CPXSB.客户编号=XSS.客户编号right join CP on CPXSB.产品编号=CP.产品编号where 产品名称=@productname)Gouse cpxs1goselect * from FU_CP('彩色电视机')go(2)按某年某季度统计给定产品名称的销售数量及销售金额;分别用名为FU1_CPXS内嵌表值函数和名为FU2_CPXS的多语句表值函数。

use cpxs1gocreate function FU12_CPXS(@year int ,@quarter int, @cpmc char(10))returns tableasreturn(select 产品名称, sum(数量) as 销售数量, sum(销售额) as 销售总额from cpxsb,cpwhere cpxsb.产品编号=cp.产品编号and 产品名称=@cpmcand datepart(year ,销售日期)=@yearand datepart(quarter,销售日期)=@quarter)Gouse cpxs1gocreate function FU2_SPXS(@year int ,@quarter int ,@cpmc char(10)) returns @xsqk table(产品名称char (10),销售数量int ,销售金额int)asbegin insert into @xsqkselect 产品名称,sum(销售额)as 销售总额,sum(数量)as 销售数量from cpxsb,cpwhere cpxsb.产品编号=cp.产品编号and 产品名称=@cpmcand datepart (year ,销售日期)=@yearand datepart (quarter, 销售日期)=@quartergroup by 产品名称returnendgo(3)根据销售商名称,统计其在某年某季度内销售商品名称、数量及金额。

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

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

实验五:触发器和存储过程一.实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。

二.实验内容:有一个小型的图书管理数据库,包含的表为:bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表borrowcard(cardid,ownername);--借书证表borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表写一个存储过程,实现借书操作,要求有事务处理。

(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。

(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。

(3)要求用触发器实现表的完整性控制。

三、操作与运行1.创建图书数据库:create table bookstore(bookid int not null primary key,bookname char(20),bookauthor char(20),purchasedate datetime,state char(4))create table borrowcard(cardid int not null primary key,ownername char(20))create table borrowlog(cardid int not null,bookid int not null,borrowdate datetime,returndate datetime,primary key(cardid,bookid),---foreign key(cardid)references borrowcard(cardid), ---foreign key(bookid)references bookstore(bookid) )通过以上语句,可以看到数据库中的表建立成功。

实验5 存储过程,函数,触发器操作

实验5  存储过程,函数,触发器操作

实验5 存储过程、函数、触发器操作
已知一个已经建好的数据库factory,现在该数据库上存在三个表
1.职工表worker,其结构为 (职工号 numnber ,姓名 char(8), 性别 char(2) ,
出生日期 date, 党员否 char, 参加工作时间 date , 部门号 number ),其中职工号为主键
2.部门表 department 结构为 ( 部门号 number , 部门名称 varchar(20) ) ,
其中部门号为主键. 通常的部门信息有人事部,市场部,财务处等等
3.职工工资表 salary 其结构为 ( 职工号 number ,姓名 char(10) , 日期
date , 工资 number(10,2) ) . 其中职工号和日期为关键字
在以上的数据库上完成如下操作:
1.创建一个为worker表添加职工记录的存储过程addworker
2.创建一个为给定职工号,查询职工信息及部门名称的存储过程query_worker
3.创建一个为给定职工号,删除worker表中记录的存储过程delete_worker
4.显示存储过程
5.创建一个函数,完成给定职工号返回职工所在部门的名称的函数
6.创建一个函数,完成给定部门号返回该部门的最大年龄的函数
7.在表department上创建一个触发器deaprt_update,当更改部门号时同步更
改worker表中对应的部门号
8.在表worker上创建一个触发器worker_delete,当删除职工记录同步删除对
应职工的工资记录
9.删除两个刚刚建立触发器
以上内容请书写实验报告
余下时间请完成数据库的预备试验。

实验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分,该学生就能得到相应的学分,否则,该学生不能得到学分。

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

存储过程和触发器(实验报告)
CREATE PROCEDURE stu_en
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创建触发器的方法和步骤;

实验九 存储过程和触发器

实验九   存储过程和触发器

实验九存储过程和触发器〖仪器设备〗每位学生一台PC机(标准配制,1G内存),装有SQL Server 2005或者其他DBMS〖目的要求〗1.了解几个常用的系统存储过程。

2.掌握如何使用T-SQL语句创建、执行和重编译存储过程。

3.了解如何使用企业管理器管理存储过程。

4.掌握如何使用T-SQL语句创建触发器。

5.了解如何使用企业管理器创建触发器。

6.掌握AFTER触发器的用法,并了解INSTEAD OF触发器的用法。

〖实验内容〗1.创建存储过程。

(1)创建一个存储过程,查看“2”号课程的选修情况,包括选修该课程的学号、姓名和成绩。

use student_coursegocreate procedure ssc_3asselect student.sno,sname,gradefrom student join sc on student.sno=sc.snowhere o='2'go(2)执行存储过程execute ssc_32.使用输入参数(1)上面所建立的存储过程只能对“2”号课程的选修情况进行查看,要想对所有课程进行随机查看,需要进行参数的传递。

use student_coursegocreate procedure ssc_4@cnumber char(5)asselect student.sno,sname,gradefrom student join sc on student.sno=sc.snowhere o=@cnumbergo(2)按位置传递参数execute ssc_4 '3'(3)通过参数名传递参数execute ssc_4@cnumber='3'3.使用默认参数值(1)执行存储过程ssc_4时,如果没有给出参数,系统会报错。

如果希望不给参数时,能查询所有课程的进修情况,则可以使用默认参数值来实现。

use student_coursegocreate procedure ssc_5@cnumber char(5)=nullasif @cnumber is nullbeginselect student.sno,sname,gradefrom student join sc on student.sno=sc.snoendelsebeginselect student.sno,sname,gradefrom student join sc on student.sno=sc.snowhere o=@cnumberendgo(2)执行下面两条语句,比较执行结果。

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

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

实验六存储过程和触发器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,查询指定班级指定课程的平均分。

实训4:存储过程和触发器

实训4:存储过程和触发器

实训4:存储过程和触发器一、实训目的1、了解存储过程、触发器的概念。

2、会运用T-SQL语句创建存储过程、触发器。

2、掌握如何调用存储过程。

二、实训工具及设备1、实训软件:SQL Server。

2、实训设备:安装Windows系统计算机一台。

三、实训预备知识1、存储过程我们曾经学习过C语言的函数,使用函数时需要两步。

第一步:定义函数,它允许包含参数和返回值。

第二步:调用函数。

函数可以反复的调用,它方便了程序的模块化设计,大大提高了执行效率。

存储过程类似于C语言中的函数,它是存储在SQL SERVER服务器中的一组预编译过的SQL语句,当第一次调用以后,就驻留在内存中,以后调用时不必再进行编译,因此它的运行速度比独立运行同样的程序要快。

在SQL SERVER中存储过程分为两类:系统存储过程和用户自定义存储过程。

系统存储过程存储在master数据库中并以sp_为前缀(用户创建存储过程的时候不要以sp_为前缀),在任何数据库中都可以调用系统存储过程。

除了使用系统存储过程,用户还可以创建自己的存储过程。

当创建存储过程时,需要确定存储过程的三个组成部分:所有的输入参数及执行后的输出结果(返回值);∙返回给调用者的状态值,以指明调用是否成功。

使用T-SQL语句创建存储过程的语法格式如下:CREATE PROCEDUER 存储过程名[@参数1 参数的数据类型][=默认值] [OUTPUT],……[@参数n 参数的数据类型][=默认值] [OUTPUT]ASSQL语句其中:使用OUTPUT选项可将@参数的值返回给调用语句。

(1)创建不带参数的存储过程代码清单4-1:在选课系统(ElectiveSystem)数据库中创建每门选修课的平均分use ElectiveSystemgocreate procedure proc_courseAvgasselect courseName,avg(grade) as '平均成绩'from course,scwhere course.courseNo=sc.courseNogroup by course.courseNamego在查询分析器中调用存储过程proc_courseAvg,结果如下图4-1所示。

数据库原理 实验四 存储过程与触发器、函数

数据库原理 实验四 存储过程与触发器、函数

《数据库原理》实验报告题目:实验四 存储过程与触发器、函数 学号: 成 绩班级: 计算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、创建一个触发器。

向进货表中插入一条记录时,这个触发器都将更新库存表。

如果库存有该类商品时,那么该商品的进价即为两次进价的平均值(因为每次的进价可能会不相同),库存量为原有库存加该次进货数量;(算法为:(库存商品进价*库存量+进货价*进货量)/(库存量+进货量);如果没有该商品,则插入到库存表中。

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

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

存储过程、触发器和用户自定义函数实验实验内容一练习教材中存储过程、触发器和用户自定义函数的例子。

教材中的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表中删除一条记录。

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

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

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

二、实验环境硬件: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表中。

实验六存储过程和触发器

实验六存储过程和触发器

实验六存储过程和触发器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”(经理办公室)。

实验五 存储过程和触发器

实验五 存储过程和触发器

实验五触发器、存储过程操作实验本实验需要2学时。

请大家先根据“触发器.doc”文档完成相关操作,再进行本次实验。

介绍完“存储过程”后,需上交本次实验报告。

一、实验目的(1)掌握SQL Server中的触发器的使用方法;(2)掌握存储过程的操作方法。

二、实验内容1. 创建、查看、修改和删除触发器。

2. 创建、查看、修改和删除存储过程。

三、实验方法1. 触发器的操作(1)建立触发器方法一:使用企业管理器首先,打开企业管理器,定位数据库并找到要创建触发器的表;然后,右击该表名,在弹出的快捷菜单中选择“设计表”,在打开的“设计表”窗口中单击按钮,打开如图1所示窗口。

图1 触发器属性窗口最后,在触发器属性窗口中输入触发器的内容,并单击“确定”按钮。

方法二:使用CREATE TRIGGER语句语法:CREATE TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]}AS<SQL 语句块>(2)查看触发器方法一:使用企业管理器方法二:使用T-SQL语句- sp_help <触发器名>- sp_helptext <触发器名>- sp_depends <触发器名>(3)修改触发器方法一:使用企业管理器方法二:使用ALTER TRIGGER语句语法:ALTER TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]} AS<SQL 语句块>(4)删除触发器方法一:使用企业管理器方法二:使用DROP TRIGGER语句语法为:DROP TRIGGER <触发器名>2. 存储过程的操作(1)建立存储过程方法一:使用建立存储过程向导方法二:使用企业管理器方法三:使用SQL语句(CREATE PROCEDURE)语法:CREATE PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句> | <语句块> }(2)查看存储过程方法一:使用企业管理器方法二:使用SQL语句(系统存储过程)- sp_help <存储过程名>- sp_helptext <存储过程名>- sp_depends <存储过程名>(3)修改存储过程方法一:使用企业管理器方法二:使用SQL语句(ALTER PROCEDURE)语法为:ALTER PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句>| <语句块> }(4)删除存储过程方法一:使用企业管理器方法二:使用DROP PROCEDURE语句语法为:DROP PROCEDURE <存储过程名>四、实验内容1、在学生表student上建立一个DELETE类型的触发器tr_delete,触发动作是显示信息“已删除学生表中的数据”。

实验6 数据库实验——存储过程和触发器

实验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的结果。

实验7存储过程和触发器

实验7存储过程和触发器

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

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

(3)掌握通过SQL Server管理平台和Transact-SQL语句ALTER PROCEDURE修改存储过程的方法。

(4)掌握通过SQL Server管理平台和Transact-SQL语句DROP PROCEDURE删除存储过程的方法。

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

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

(7)掌握使用SQL Server管理平台或Transact-SQL语句修改和删除触发器。

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

2.实验内容及步骤请先附加studentsdb数据库,然后完成以下实验。

(1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示个小写字母。

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

语句:CREATE PROCEDURE stu_info@name varchar(40)='刘卫平'--将@name值设为默认值'刘卫平'AS答:请完善执行EXEC stu_infoEXEC stu_info '马东'(3)使用系统存储过程sp_rename将存储过程stu_grade更名为stu_g。

答:(4)使用grade表。

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

②执行存储过程stu_g_r,输入学号'0002'。

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

数据库实验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语句可永久地删除存储过程。

实验:存储过程与触发器

实验:存储过程与触发器

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

实验八存储过程、存储函数和触发器

实验八存储过程、存储函数和触发器

《MySQL数据库应用》实验指导实验八存储过程、存储函数和触发器一、实验目的1、掌握存储过程创建和调用的方法;2、掌握存储函数创建和调用的方法;3、掌握游标的使用方法;4、掌握触发器的使用方法;5、掌握事件的创建和使用方法。

二、实验学时2学时三、实验类型验证性四、实验需求1、硬件每位学生配备计算机一台:Pentium III以上处理器,2G或以上内存,2G或以上硬盘空间。

2、软件Windows操作系统,安装MySQL Community Server软件。

3、网络局域网环境。

4、工具无。

五、实验理论与预备知识1、了解存储过程中允许sql语句类型和参数的定义方法;语法格式:CREATE PROCEDURE存储过程名([过程参数...])[特征...]存储过程体2、了解存储过程的调用方法;语法格式:CALL存储过程名([参数...]3、了解存储函数的定义和调用方法;语法格式:CREATE FUNCTION存储过程名([参数...])RETURNS type[特征...]存储函数体存储函数的调用:SELECT存储函数名([参数[,...]])4、了解触发器的作用和使用方法;语法格式:CREATE TRIGGER触发器名触发时刻触发事件ON表名FOR EACH ROW触发器动作5、了解游标的使用方法。

语法格式:声明游标DECLARE游标名CURSOR FOR select语句打开游标OPEN游标名读取数据FETCH游标名INTO变量名...关闭游标CLOSE游标名六、实验内容与结果以数据库user_db及数据表student、teacher、class、course、sc为基础(数据表及相关表数据来源于实验三),请将实现功能的SQL语句填写到实验报告册;1、创建user_db数据库的存储过程,判断两个输入的参数哪一个更大,并调用这个存储过程。

2、在user_db数据库中的sc表中增加一列学分credit,然后创建一个存储过程,有两个输入参数:stu_id和cou_id,要求当某学生某门课程的成绩小于60分时将其学分修改为零,大于等于60分时将学分修改为此课程的学分,并调用这个存储过程。

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

存储过程、触发器和用户自定义函数实验实验内容一
练习教材中存储过程、触发器和用户自定义函数的例子。

教材中的BookSales数据库,在群共享中,文件名为。

实验内容二
针对附件1中的教学活动数据库,完成下面的实验内容。

1、存储过程
(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。

(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。

(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。

(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。

(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。

2、触发器
(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。

(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。

(3)为course表创建一个INSERT触发器,要求插入的课程记录中任课教师不能为空。

3、用户自定义函数
(1)创建一个返回标量值的用户定义函数RectangleArea:输入矩形的长和宽就能计算矩形的面积。

create function RectangleArea(@a int,@b int)returns int
as
begin
return@a*@b
end
(2)创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。

该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。

调用这个函数,生成相应的报表并给用户浏览。

create function student_table()returns table
as
return(
select课程号,课程名,COUNT选修人数,max最高分,min最低分,avg平均分
from student_course,course
where=
group by,
)
实验数据库说明
教学活动数据库包括student、course和study三个基本表,三个基本表的结构说明和数据如下:
(1)学生表(student)
学生表的结构
列名数据类型长度是否允许为空值字段说明
sno char5NO学号
sname char8NO姓名
age smallint年龄
sex nchar1性别
说明:sno为主键,age的范围为15~35之间,sex只能为“男”或“女”。

学生表的记录
sno sname age sex
(2)课程表(course)
课程表的结构
说明:cno为主键。

课程表的记录
(3)选课表(study)
选课表的结构
说明:sno和cno为主键,sno为外键(参照student表的sno),cno为外键(参照course 表的cno),score的范围为0~100之间。

选课表的记录。

相关文档
最新文档