实验六存储过程设计
实训六存储过程

实训六:存储过程1.实训目的1)通过对常用系统存储过程的使用,了解存储过程的类型;2)通过创建和执行存储过程,了解存储过程的基本概念,掌握使用存储过程的操作技巧和方法;3)通过对已创建的存储过程的改变,掌握修改存储过程的操作技巧和方法;2.实训工具SQL Server2005SQL Server Management Studio。
3 实训内容(保存操作过程程序设计语句和结果)1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。
2、在学生库中创建存储过程proc_8_t1,要求实现如下功能:产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、学分、学号、姓名、系别、性别等。
并调用此存储过程,显示执行结果。
3、在学生库中创建存储过程proc_8_t2,要求实现如下功能:输入系号,产生该系学生的选课情况列表,其中包括系号、学号、姓名、课程号、课程名、成绩、学分等。
并调用此存储过程,显示信息系号为‘20’的所有学生的选课情况列表。
4、在学生库中创建存储过程proc_8_t3,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生学分不足!”,否则显示“此学生学分已足!”。
并调用此存储过程,显示“1002”学生的总学分情况。
对学生库中已创建的存储过程proc_8_t1进行修改,要求在显示列表中增加教师字段,即产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、授课教师号(TNO)、学分、学号、姓名、系别、专业、性别等。
5、对学生库中已创建的存储过程proc_8_t2进行修改,要求实现如下功能:输入课程名称,产生选修该课程所有男生的选课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、学分等。
并调用修改后的存储过程,显示选修“离散数学”男生的选课情况列表。
6、对学生成绩库中已创建的存储过程proc_8_t3进行修改,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生所选总学分为XXX,学分不足!”,否则显示“此学生所选总学分为XXX,学分已足!”。
实验六 MySql存储过程

实验六MySql存储过程一、实验目的1、熟悉MySql的存储过程二、实验内容1、建立一张学生表,属性有学号、姓名、年龄三个字段。
2、建立一个存储过程,实现学生的全查询3、分别用IN 和OUT实现姓名的调用4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。
5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.6、建立一个存储过程,做一个循环语句,循环插入5个学生。
(至少用三种循环的存储过程方法)三、试验结果截图1.建立一张学生表,属性有学号、姓名、年龄三个字段。
2.建立一个存储过程,实现学生的全查询3.分别用IN 和OUT实现姓名的调用4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。
5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.6建立一个存储过程,做一个循环语句,循环插入5个学生。
(至少用三种循环的存储过程方法)所有代码:1.create table stu(stuno int,stuna varchar(20),stuage int);insert into stu values(001,'zhangsan',22);insert into stu values(002,'lisi',23);insert into stu values(003,'wangwu',23);insert into stu values(004,'maliu',24);insert into stu values(005,'zhaoqi',25);insert into stu values(006,'gaoba',23);insert into stu values(007,'ddddd',22);insert into stu values(008,'ttttt',21);2.create procedure select_all()select * from stu;3.delimiter //create procedure searchno(in no int,out na varchar(20),out age int)beginselect stuna from stu where stuno=no into na;select stuage from stu where stuno=no into age; end //delimiter ;call searchno(n,@na,@age);select @na,@age;4.delimiter //create procedure noupdate(in n int)beginupdate stu set stuno=stuno+n;end //delimiter ;5.delimiter //create procedure addstu(in sno int)begincase snowhen 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20);end case;end //delimiter ;6.(1).delimiter //create procedure add5stu1()begindeclare num1 int;set num1=0;loop_label:loopinsert into stu values (111,'111',20);set num1=num1+1;if num1>=5 then leave loop_label;end if;end loop;end //delimiter ;(2).delimiter //create procedure add5stu2()begindeclare num2 int;set num2=0;while num2<5 doinsert into stu values (222,'222',20);set num2=num2+1;end while;end //delimiter ;(3).delimiter //create procedure add5stu3()begindeclare num3 int;set num3=0;repeatinsert into stu values (333,'333',20);set num3=num3+1;until num3>=5end repeat;end //delimiter ;四、实验小结本次试验让我好好补习了下前段时间落下的课程,让我对数据库有了新的体会和认识,试验中碰到了一些问题,但都已解决和理解。
网络数据库实验六存储过程

实验:存储过程实验学时:2个学时实验类型:(验证、综合、设计)一、内容概述:1、存储过程简介存储过程是存储于数据库中的一组T-SQL语句。
有了存储过程之后,与数据库的交互就没有必要在程序中写一堆的SQL语句,而只需用一条语句调用适当的存储过程来完成就可以了。
另外,由于代码是存储在数据库中,我们也可以在不同的应用程序或查询窗口中不断的重复利用那些代码。
存储过程功能的优点①预编译执行程序。
SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划。
这个特点通过重复调用存储程序极大地提高了程序的性能。
②缩短客户端/服务器之间的信息传输量。
如果你的工作环境带宽有限,那么存储过程技术肯定能够满足你,因为它能够把需要传输的长的SQL查询缩短成一行。
③有效重复使用代码和编程。
存储过程可以为多个用户所使用,也可以用于多个客户程序。
这样可以减少程序开发周期的时间。
④增强安全性控制。
可以允许用户单独执行存储过程,而不给于其访问表格的权限。
2、创建存储过程语法CREATE PROC[ EDURE ] [ owner. ] procedure_name [ ; number ][ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ][ WITH{ RECOMPILE | ENC RYPTION | RECOMPILE , ENC RYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]示例:AjaxCity表ID CityName Short1 苏州市SZ2 无锡市WX3 常州市CZ⑴.选择表中所有内容并返回一个数据集CREATE PROCEDURE mysp_AllASselect * from AjaxCityGO执行结果⑵.根据传入的参数进行查询并返回一个数据集CREATE PROCEDURE mysp_para@CityName varchar(255),@Short varchar(255)ASselect * from AjaxCity where CityName=@CityName And Short=@ShortGO执行结果⑶.带有输出参数的存储过程(返回前两条记录的ID的和)CREATE PROCEDURE mysp_output@SUM int outputASselect @SUM=sum([ID]) from (select top 2 * from AjaxCity) as tmpTable GO执行结果二、实验报告实验报告课程名称网络数据库SQL Server2005实验名称存储过程实验时间________年____月____日成绩一、实验目的1、熟悉存储过程基本概念和类型。
实验六管理存储过程11页word

实验六存储过程与触发器一、存储过程【创建存储过程】:CREATE PROCEDURE [OWNER].[PROCEDURE NAME]AS <SQL块>如:Use pubsGoCreate procedure author_informationAsselect au_lname,au_fname,title,pub_namefrom authors ajoin titleauthor taon a.au_id=ta.au_idjoin titles ton t.title_id=ta.title_idjoin publishers pon t.pub_id=p.pub_idGo【管理存储过程】:➢可以使用sp_helptext命令查看创建存储过程的文本信息。
Use pubsGoSp_helptext author_informationGo➢可以用sp_help查看存储过程的一般信息。
Use pubsGoSp_help author_informationGo➢可以使用系统存储过程sp_rename修改存储过程的名字。
Use pubsGoSp_rename author_information ,authors_informationGo➢也可以使用企业管理浏览存储过程的信息,具体方法是:✧从树型结构上选中存储过程所在的数据库节点,展开该节点;✧选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所有的存储过程;✧选中存储过程,右击,执行〖属性〗命令,则系统将弹出如图所示对话框。
✧可以在对话框中修改存储过程内容,并保存修改。
✧如果想知道某个表被存储过程引用的情况,可以使用sp_depends,Sp_depends authors✧如果想知道某个存储过程引用表的情况,则可以使用Sp_depends procedure_name【执行存储过程】:对于存储过程的调用,应使用EXECUTE或EXEC关键字。
实验六-存储过程与触发器

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

[3]《SQL SEVER数据库原理及应用》,张莉,清华大学出版社,2005
下次实验内容
存储过程的建立、修改和执行,触发器的建立和修改,设计一组操作触发触发器的执行
在A中,提交事务
在A,B窗口分别察看customerid = 'ANTON’的记录,结果如何,为什么?
3、锁的模拟
启动两个查询分析器,分别叫(A,B)
在A中,显式启动事务,察看customerid = 'ANTON'的记录
在B中,显式启动事务,察看customerid = 'ANTON'的记录
在B中,将customerid = 'ANTON’地址更新为’AAAAAA’
1).通过试验,加深学生对事务的基本概念理解语掌握;
2).通过试验,加深学生对并发控制的基本概念理解,认识不正确的并发控制所带来的危害;
3).通过试验,加深学生对锁的基本概念的掌握与理解,认识锁带来的问题;
二、实验环境
硬件:奔腾4处理器,1.8GHz,512M内存
操作系统软件:WindowsXP
数据库系统:SQLServer 2000桌面版
(3)对视图的操作
2、难点:
设计一系列操作触发触发器的执行。
四、仪器设备及用具
硬件:每位同学分配PC机一台
软件:windows环境安装好SQL Server
五、教学过程
(一)实验预习
(1)熟悉SQL中的创建存储过程和触发器的SQL语句
(2)准备好实验所用的数据库及原始数据
(二)实验原理
在查询分析器下利用SQL命令完成对所要求的存储过程的创建和执行,完成触发器的执行和设计相应操作触发触发器的执行。
存储过程教学设计方案

一、教学目标1. 知识目标:(1)了解存储过程的概念、作用和优势。
(2)掌握存储过程的创建、执行和修改方法。
(3)熟悉存储过程的参数传递和返回值。
(4)了解存储过程的异常处理和安全性。
2. 能力目标:(1)能够根据实际需求设计并创建存储过程。
(2)能够正确调用存储过程,并处理执行过程中的异常。
(3)能够对存储过程进行优化,提高数据库性能。
(4)能够编写简单的存储过程,实现复杂的数据操作。
3. 情感目标:(1)培养学生对数据库技术的兴趣和热情。
(2)提高学生的团队协作能力和沟通能力。
(3)培养学生的创新意识和解决问题的能力。
二、教学内容1. 存储过程的概念及作用2. 存储过程的创建3. 存储过程的执行4. 存储过程的修改5. 存储过程的参数传递6. 存储过程的返回值7. 存储过程的异常处理8. 存储过程的安全性9. 实战案例:创建、执行和优化存储过程三、教学方法1. 讲授法:系统讲解存储过程的基本概念、创建、执行、修改等知识。
2. 案例分析法:通过分析典型案例,让学生理解存储过程在实际应用中的价值。
3. 练习法:引导学生进行实际操作,巩固所学知识。
4. 讨论法:鼓励学生提出问题,进行小组讨论,共同解决问题。
5. 实战演练:组织学生进行实际项目开发,锻炼学生的实际操作能力。
四、教学过程1. 导入:介绍存储过程的概念、作用和优势,激发学生的学习兴趣。
2. 讲解存储过程的基本概念、创建、执行、修改等知识。
3. 通过案例分析,让学生了解存储过程在实际应用中的价值。
4. 引导学生进行实际操作,创建、执行和修改存储过程。
5. 讲解存储过程的参数传递、返回值、异常处理和安全性等知识。
6. 组织学生进行小组讨论,共同解决在操作过程中遇到的问题。
7. 实战演练:组织学生进行实际项目开发,锻炼学生的实际操作能力。
8. 总结:回顾本节课所学内容,强调重点和难点。
五、教学评价1. 课堂表现:观察学生的出勤情况、课堂参与度和提问情况。
实验存储过程实验报告

一、实验目的1. 了解存储过程的基本概念和作用。
2. 掌握存储过程的创建、执行和修改方法。
3. 学会使用存储过程进行数据库操作,提高数据库操作效率。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench三、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程四、实验步骤1. 创建存储过程(1)打开MySQL Workbench,连接到本地数据库。
(2)在查询窗口中输入以下SQL语句创建一个存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT FROM students;END //DELIMITER ;(3)执行以上SQL语句,成功创建存储过程。
2. 执行存储过程(1)在查询窗口中输入以下SQL语句执行存储过程:CALL SelectAllStudents();(2)观察查询结果,确认存储过程执行成功。
3. 修改存储过程(1)打开查询窗口,输入以下SQL语句修改存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT id, name, age FROM students;END //DELIMITER ;(2)执行以上SQL语句,成功修改存储过程。
4. 删除存储过程(1)在查询窗口中输入以下SQL语句删除存储过程:DROP PROCEDURE IF EXISTS SelectAllStudents;(2)执行以上SQL语句,成功删除存储过程。
五、实验总结1. 通过本次实验,我们了解了存储过程的基本概念和作用,学会了创建、执行、修改和删除存储过程的方法。
2. 存储过程可以提高数据库操作效率,降低代码重复性,提高代码可维护性。
3. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嘉应学院计算机学院
2012年 12月12日
一、实验目的
通过实验掌握SQL SERVER存储过程的基本设计方法。
二、实验原理
存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL 语句的集合,它被编译并存储为一个单一的数据库对象,可用存储过程实现批处理。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
游标(Cursor)它使用户可逐行访问由数据库返回的结果集。
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。
基本语法:
create procedure 存储过程名 (参数表 )
as
t_sql语句的集合
t_sql语句除SQL语句外,还可包括声明变量,流控制语句及游标等。
(注意:t_sql语句在不同的数据库系统中,语法不同)
三、实验环境
操作系统:Windows Server 2003 、Windows 7
编译环境:SQL Server Enterprise Manager
数据库管理系统:Microsoft SQL Server 2005
四、实验步骤及内容
1. 了解T_SQL语法
(1)变量
A.局部变量
例如:declare @v_sno nvarchar(20), @v_grade float /* 声明了两个局部变量 */
B.全局变量
如:@@error, @@fetch_status
C.表变量
声明表类型变量的语句将该变量初始化为一个具有指定结构的空表。
例如:
declare @Mytab table
(id int primary key,
books varchar(15)
)
insert @Mytab values(1,'9901')
insert @Mytab values(2,'9902')
select * from @Mytab
(2) 流控制语句
begin ... end
if .. else
while ... break
break
continue
goto
waitfor
if @@error<>0 goto prog1 select * from course if @@error<>0 goto prog2 select * from course prog1:
select * from sc
prog2:
select * from student
waitfor delay '00:01:00' select * from sc
2. 创建存储过程步骤
1) 写SQL语句
例如:查询所有学生的记录
select * from student
2) 测试SQL语句
执行这些S Q L语句。
确认符合要求。
3) 若得到所需结果,则创建过程
如果发现符合要求,则按照存储过程的语法,定义该存储过程。
create procedure dem1 as select * from student
4) 执行过程
执行存储过程,验证正确性。
EXEC dem1
检查是否已经存在存储过程
例如:检查是否已经存在spp,如果存在则删除它。
if exists (SELECT name FROM sysobjects WHERE name = 'spp' AND type = 'P') drop procedure spp
3. 无参数传递存储过程
执行时,不需要向存储过程传递参数。
先阅读下列程序,并且运行之,如果结果正确,将其写入存储过程SPP1中。
select * from sc
WHILE (SELECT AVG(grade) FROM sc) < 90
BEGIN
UPDATE sc
SET grade = grade*1.1
SELECT MAX(grade) FROM sc
IF (SELECT MAX(grade) FROM sc) > 98
BREAK
ELSE
CONTINUE
END
请注意观察结果。
4. 带参数传递存储过程
创建存储过程:
阅读并试运行下列程序:
create procedure dem1 (@sno1 char(20))
as
select avg(grade),@sno1 from sc where sno=@sno1 group by sno
执行存储过程:
exec dem1 95001
记录结果。
请通过该存储过程查询95002的平均成绩。
5. 游标
创建下列存储过程,运行并观测结果。
fetch 语句提取游标中指定的行:
fetch [[next|prior|first|last|absolute {n|@nvar}|Relative {n|@nvar}]
from
]
[@cursor_variable_name}
[into @variable_name]
@@fetch_status是一个函数(或全局变量),它返回在当前连接期间执行的最后一条fetch语句的执行状态。
执行状态 0 表示提取完全成功; -1 读取失败;-2 记录丢失。
close语句
关闭一个打开的游标,释放当前的记录集。
deallocate语句
close执行后,游标结构仍然存在,还可以再次打开,如果不再使用,用deallocate 语句删除该结构。
CREATE PROCEDURE t_cursor
AS
declare @v_sno nvarchar(20), @v_grade float /* 声明变量 */
declare @mycursor cursor /* 声明变量@mycursor 为游标 */
set @mycursor=cursor for select sno,grade from sc
where cno in(select cno from course where cname='数据库') /* 将查询结果赋予游标 */
open @mycursor /* 开启游标 */
fetch next from @mycursor /* 提取指定行 */
into @v_sno,@v_grade /* 将提取的结果赋予变量 */
print '游标成功取出一条数据'
print @v_sno
print @v_grade
while(@@fetch_status = 0) /* 将提取的结果赋予变量 */
begin
Update SC set grade=grade+@v_grade where sno=@v_sno
fetch next from @mycursor into @v_sno,@v_grade
end
close @mycursor /* 关闭一个打开的游标,释放当前的记录集 */
deallocate @mycursor /* 删除游标结构 */
6.设计带参数传递存储过程
(1)将XXX同学的成绩都减少10分。
(2)查询XXXX系XXXX课程的姓名、课程名和成绩。
五、结论
根据实验目的和实验内容,通过实验掌握SQL SERVER存储过程的基本设计方法。
在基本原理中,我们可以进一步了解存储过程和游标的相关概念描述,按照步骤与实验内容完成本实验。
在实验中,了解了T_SQl语法并执行了T_SQl语句,测试了带参数以及不带参数的存储过程,总的来说,本次实验除了个别题有请教过同学,基本上都是自己独立完成的,有点小小成就感。