《数据库系统原理》实验指导书参考答案(计本10、电商10)(7)

2019-06-17 10:20

实验十:存储过程

一、实验目的

通过实验使学生加深对数据完整性的理解,学会创建和使用存储过程。 二、原理解析 1、存储过程概述

存储过程是指,在一个执行规划中预先定义并编译好的一组Transact-SQL语句。这些语句在一个名称下存储并作为一个单元进行处理。存储过程是编写数据库代码中的重要成份。它们可以是构成任何一个由数据库支撑的应用程序的代码,并且能被这些应用程序中的任何一个调用。

存储过程能在查询分析器(Query Analyzer)窗口运行。它们可以被批处理文件调用,也可以由Access、Visual Basic或者其他编程语言的用户接口程序来调用。可以像其他子例程调用一样,把参数传给存储过程。存储过程会返回数据值、状态代码以及错误信息,这样用户就可以做出适当的响应。存储过程也能调用其他存储过程。存储过程能够在本地计算机或远程服务器上运行。在执行系统内部任务时,用户可以指示SQL Server自动运行某种存储过程。

存储过程类型包括系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。通过存储过程的创建、执行、修改和删除操作,初步了解存储过程的类型,掌握利用存储过程进行程序设计的方法技巧。 2、存储过程的类型

系统存储过程、用户自定义存储过程、扩展存储过程。 3、在SQL中创建存储过程的语法 创建存储过程的语法为:

CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ]

29

AS sql_statement [ ...n ]

4、存储过程的执行 执行存储过程: [ [ EXEC [ UTE ] ] {

[ @return_status = ]

{ procedure_name [ ;number ] | @procedure_name_var }

[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } [ ,...n ]

[ WITH RECOMPILE ] 5、存储过程中的参数

输入参数和输出参数(OUTPUT)。 三、实验内容

(1) 创建不带参数的存储过程。 (2) 创建带输入参数的存储过程。 (3) 创建带输出参数的存储过程。 四、实验步骤

1、在学生成绩库中创建存储过程,存储过程名为proc1,要求实现如下功能:根据学生学

号,查询该学生的选课情况,其中包括该学生学号、姓名、性别、课程号、课程名、成绩和学分等。

CREATE PROCEDURE proc1

@sno char(8) --@sno是参数,字符型,表示某个学生的学号 AS

SELECT xscj.学号, xsqk.姓名, xsqk.性别, xscj.课程号, xskc.课程名, xscj.成绩, xscj.学分 FROM xscj, xsqk, xskc WHERE xscj.学号 = xsqk.学号 AND xscj.课程号 = xskc.课程号 AND xsqk.学号 = @sno GO

30

2、现有一学生学号为“02020101”,要求通过调用上例中所建的名为proc1的存储过程,实现显示该学生的选课情况列表。 EXECUTE proc1 ?02020101? 或

EXECUTE proc1 @sno = ?02020101? 或

EXEC proc1 @sno =?02020101?

3、在学生成绩库中创建一个名为proc2的存储过程,产生一个学生选课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、学分等,并调用该存储过程查看学生的选课情况。

CREATE PROCEDURE proc2 AS

SELECT xscj.学号, xsqk.姓名, xsqk.性别, xscj.课程号, xskc.课程名, xscj.成绩, xscj.学分 FROM xscj, xsqk, xskc WHERE xscj.学号 = xsqk.学号 AND xscj.课程号 = xskc.课程号 GO EXEC proc2

4、在学生成绩库中创建一个名为proc3的存储过程,产生某门课程的选课学生情况列表,其中包括课程号、课程名、学号、姓名、系别、班级、专业、性别等。要求输入某门课程的课程号,得到上述信息。 CREATE PROCEDURE proc3

@cno char (3) --@cno是参数,字符型,表示某门课的课程号 AS

SELECT xscj.课程号, xskc.课程名,xscj.学号, xsqk.姓名, xsqk.系别,xsqk.班级, xsqk.专业,xsqk.性别 FROM xscj, xsqk, xskc WHERE xscj.学号 = xsqk.学号 AND xscj.课程号 = xskc.课程号 AND xscj.课程号 = @cno

31

GO

5、利用上述存储过程查询课程号为“101”的课程的选课学生情况列表。 Exec Proc3 ?101?

6、定义存储过程proc4,要求实现输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格!”,否则显示“此学生综合成绩不合格!”。

CREATE PROCEDURE proc4

@sno char(8) --@sno是参数,字符型,表示学生的学号 AS

DECLARE @savg tinyint --声明变量@savg,用于存放学生平均成绩 SELECT @savg = avg(成绩) FROM xscj

WHERE xscj.学号 = @sno --变量@savg存放学号为@sno的学生平均成绩 IF @savg>=60 --进行平均成绩的判断 PRINT ?此学生综合成绩合格!? ELSE

PRINT ?此学生综合成绩不合格!? GO

7、利用已创建的存储过程查询学号为“02020101”同学的平均成绩情况。 Exec proc4 ?02020101?

8、定义存储过程proc5,要求实现输入学号,输出该学生所选课程的平均成绩,要求用输入参数和输出参数实现。 CREATE PROCEDURE proc5

@sno char(10),@avgscore int OUTPUT AS

IF @sno=NULL

BEGIN

PRINT ?学号不能为空!? RETURN END

SELECT @avgscore=AVG(成绩)

32

from xscj

WHERE 学号=@sno RETURN

9、利用创建的存储过程查询学号为“02020101”的同学的平均成绩。 DECLARE @avgscore int

EXECUTE proc5 ?02020101?,@avgscore OUTPUT SELECT ?His average score is :?,@avgscore

10、定义存储过程proc6,要求实现如下功能:根据某学生的学号查询该生的已修学分,如果已修学分>9,则将已修学分加2分;如果已修学生小于9,则将已修学分加4分。 create proc proc6

@sno char(10),@xxf tinyint output as

declare @yxf tinyint

select @yxf=总学分from dbo.xsqk where 学号=@sno if @yxf>9 update dbo.xsqk set 总学分=总学分+2 where 学号=@sno else

update dbo.xsqk set 总学分=总学分+4 where 学号=@sno

select @xxf=总学分from dbo.xsqk where 学号=@sno

11、利用已经创建的存储过程查询学号为“02020101”的同学修改后的已修学分。 declare @xxf tinyint

exec proc6 '02020101',@xxf output select @Xxf

33


《数据库系统原理》实验指导书参考答案(计本10、电商10)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011年全国分类信息网站大全

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: