数据库SQL 10.doc
文本预览下载声明
实验报告
课程 数据库原理与应用 实验名称 存储过程的使用 第 1 页
专业___软件工程___ 班级___1 ____ 学号_ __ 姓名
实验日期:2014 年 10 月 22 日 报告退发 (订正 、 重做)
一、实验目的
了解存储过程原理,练习创建和使用存储过程
二、实验内容
1、在数据库中有学生表,成绩表,课程表。创建一个存储过程getDetailByName,通过输入参数学生姓名(如“章山”),查询出该学生的基本信息,若不存在此学生,则输出“查无此人”。
2、(1) 在数据库中有tb_bookinfo表,tb_authorinfo表,tb_pubinfo表。建立一个名为pub_name的存储过程,该过程带有两个输入参数,用于接受输入的作者姓名和书的名称,还有一个输出参数,用于返回检索出的相应出版社名称。
(2) 存储过程建立成功后,使用李石林,SQL Server作为输入参数调用该存储过程,并查看输出参数的值。
3、(1) 在数据库中有emp表,dept表。创建一个名为“SalProc”的存储过程,用来计算emp表中某部门的最高工资。
该存储过程带有一个输入参数和一个输出参数。输入参数用来指定部门编号,输出参数用来存放该部门中所有员工的最高工资。
(2) 存储过程建立成功后,使用部门编号20作为输入参数调用该存储过程,并查看输出参数的值。
4、修改上题的SalProc存储过程,使其加密。然后使用sp_helptext 查看它的源代码。
5、删除pub_name存储过程。
6、假设有下面两个表:
职工(职工号,姓名,年龄,职务,工资,部门号) ,其中职工号为主码。
部门(部门号,名称,经理名,电话) ,其中部门号为主码。
用SQL语言定义这两个表,要求包含以下完整性约束:
定义每个关系模式的主码;定义参照完整性;定义职工年龄不得超过60岁。
三、实验环境
1、计算机一台
2、Microsoft SQL Server Management Srudio
四、实验步骤
1、在数据库中有学生表,成绩表,课程表。创建一个存储过程getDetailByName,通过输入参数学生姓名(如“章山”),查询出该学生的基本信息,若不存在此学生,则输出“查无此人”。
CREATE PROCEDURE getDetailByName
@SDNAME varchar (20)
as
select 学生表.学号,学生表.姓名,学生表.性别, 课程表.课程,成绩表.成绩
FROM 学生表INNER JOIN 成绩表ON 学生表.学号=成绩表.学号INNER JOIN
课程表ON 课程表.课程号=成绩表.课程号
where 学生表.姓名=@SDNAME
go
CREATE PROCEDURE find @SDNAME varchar(20)
AS
IF EXISTS(SELECT * FROM 学生表WHERE 学生表.姓名=@SDNAME)
RETURN 1
ELSE
RETURN 0
GO
execute getDetailByName雪山飞狐
declare @sfjsei int
execute @sfjsei=find张三
if(@sfjsei=1)
print 找到此人
else
print查无此人
(2) 存储过程建立成功后,使用李石林,SQL Server作为输入参数调用该存储过程,并查看输出参数的值。
create procedure pub_name
@writer char(10),
@title char(30),
@press char(30) output
as
select authname,bookname,pubname
from tb_authorinfo inner join tb_bookinfo on tb_authorinfo.authorid=tb_bookinfo.authorid
inner join tb_pubinfo on tb_bookinfo.publishid=tb_pubinfo.publishid
where tb_authorinfo.authname=@writer AND tb_bookinfo.bookname=@title
select @press=pubname
from tb_pubinfo
DECLARE @PRE CHAR(30)
EXECUTE pub_name李石林,SQL Server,@PRE output
3、(1) 在数据库中有emp表,dept表。创建一个名为“SalProc”的存储
显示全部