数据库实验六---存储过程

什么是存储过程?

是一组被编译在一起的T-SQL语句的集合,它们被集合在一起以完成一个特定的任务。

存储过程的分类
系统存储过程
扩展存储过程(提供从SQL Server到外部程序的接口,以便进行各种维护活动)

用户自定义的存储过程

存储过程的作用

1.模块化编程
创建一个存储过程存放在数据库中后,就可以被其他程序反复使用。
2.执行速度快
存储过程第一次被执行后,就驻留在内存中。以后执行就省去了重新分析、优化、编译的过程。
3.减少网络通信量
有了存储过程后,在网络上只要一条语句就能执行一个存储过程。
4.保证系统安全性
通过隔离和加密的方法提高了数据库的安全性,通过授权可以让用户只能执行存储过程而不能直接访问数 据库对象。

创建存储过程
CREATE  PROC[EDURE]   存储过程名 
[ { @参数名  数据类型 } [ = default ] [OUTPUT] 
] [ , … n ]
  AS  
   SQL语句 [ … n ]

执行存储过程
[ EXEC [ UTE ] ] 存储过程名      [实参 [, OUTPUT] [, … n] ]


好了,下面开始以我们的实验为例来看看存储过程了:


实验内容:

1, 在图书管理数据库中创建一个存储过程,在用户借书之前,判断该用户能否借书。并进行测试,同时给出测试代码。

2. 在图书管理数据库中创建一个用户借书的存储过程,并测试。同时给出测试代码。

3, 在图书管理数据库中创建一个用户还书的存储过程,并测试。同时给出测试代码。

4, 在图书管理数据库中创建一个删除指定用户的存储过程并测试。同时给出测试代码。


/*1, 在图书管理数据库中创建一个存储过程,在用户借书之前,判断该用户能否借书。并进行测试,*/
同时给出测试代码。
create procedure bjudge_Borrow
@借阅证号 varchar(50),@书号 varchar(50)
as
declare @number int
if @借阅证号 is NULL
return 1
if(select COUNT(*) from Users where 借阅证号 = @借阅证号)=0
return 2
else
begin
select @number = (select COUNT(*) from Loan where 借阅证号 = @借阅证号)
if(select 借书上限-@number from Class_Users,Users where Users.借阅证号=@借阅证号 and 编号 = 分类)<0
return 3
else
begin
if(select 借阅对象 from Books where 书号 = @书号) = '0'
return 4
if((select 借阅对象 from Books where 书号 = @书号) = '23' and ((select 分类 from Users where 借阅证号 = @借阅证号)='2' or (select 分类 from Users where 借阅证号 = @借阅证号)='3'))
return 5
if(((select 借阅对象 from Books where 书号 = @书号) = '23') and ((select 分类 from Users where 借阅证号 = @借阅证号) !='2' and (select 分类 from Users where 借阅证号 = @借阅证号) !='3'))
return 6
if (select 借阅对象 from Books where 书号 = @书号) = '99'
return 7
end
end
------------执行此存储过程---------
declare @ret int,@tip varchar(50)
exec @ret = bjudge_Borrow @借阅证号 = 'G01000', @书号 = 'A04500014'
set @tip = case @ret
   WHEN 1 THEN  '提示: 必须指定一个借阅证号!'
   WHEN 2 THEN  '提示: 指定的借阅证号不存在!'
   WHEN 3 THEN  '提示:  结束已达上限,不可借书!'
   WHEN 4 THEN  '提示: 本书对任何用户可外借 '
   WHEN 5 THEN  '提示: 可以借阅书本!'
   WHEN 6 THEN  '提示6:  不可以借阅!本书只对研究生和教师外借'
   WHEN 7 THEN  '提示:  本书对任何用户不可外借!'
  END
PRINT @tip


/*2、在图书管理数据库中创建一个用户借书的存储过程,并测试。同时给出测试代码。 */
create proc loan_Borrow
@借阅证号 varchar(50),@书号 varchar(50)
as
insert into Loan(借阅证号,书号,借阅日期)values(@借阅证号,@书号,getdate())


------------执行此存储过程--------- 
exec loan_Borrow @借阅证号='Y00001',@书号='A04500011'




/*3、在图书管理数据库中创建一个用户还书的存储过程,并测试。同时给出测试代码。*/
create proc return_book
@借阅证号 varchar(50),@书号 varchar(50)
as
delete from Loan where 借阅证号 = @借阅证号 and 书号 = @书号


------------执行此存储过程--------- 
exec return_book @借阅证号='Y00001',@书号='A04500047'


/*在图书管理数据库中创建一个删除指定用户的存储过程并测试。同时给出测试代码*/
create proc option_delete
@借阅证号 varchar(50)
as
delete from Loan where 借阅证号 = @借阅证号
delete from Loanlist where 借阅证号 = @借阅证号
delete from Money where 借阅证号 = @借阅证号
delete from Reservation where 借阅证号 = @借阅证号
delete from Users where 借阅证号 = @借阅证号


------------执行此存储过程--------- 
exec option_delete 'G01000'


写完之后总感觉有很多要改的地方,比如第一题的判断,我是通过return一个数值,然后使用case语句打印输出的,但这样仿佛和真实的图书馆存储过程有点区别,后来和室友讨论之后,感觉还是使用return语句,直接在判断之后直接print打印出结果,这样的话在执行存储过程的时候只需要输入借阅证号和书号即可,不需要再麻烦的使用case语句了.其他的目前还没有发现有什么别的问题,如果有人看到了我的问题,欢迎指出.




  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据库系统概论课程设计之“图书馆数据库管理系统” ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 小组成员: *** QQ:763157698 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ “图书馆数据库备份文件”使用说明: 1、数据库备份文件还原时,应先将同目录下的备份文件 "LibrarySystem" 放置于“D:\LibrarySystem\”目录下; 2、该数据库使用到的所有数据均备份在同目录下的文件 "LibrarySystem" 中,读者可以根据需要还原数据、测试数据; 3、本课程设计附有“图书馆数据库管理系统的所有源代码”,您可以根据需要在“第四章节”至“第七章节”中进行查看,或查看与本课程设计处于同一目录下的 *.sql 源代码文件! 本图书馆管理系统谨根据实际需求所创建,创建有如下八个数据表:Book(图书信息表),Dept(学生系部信息表),Major(学生专业信息表),Student(学生信息表),StudentBook(学生借阅图书信息表),Teacher(教师信息表),TeacherBook(教师借阅图书信息表),RDeleted(读者还书信息表)等。这些数据表结合图书馆数据库中的五个存储过程,即实现了普通图书馆的大部分功能。如读者借阅图书功能(Execute RBorrowBook '读者号','图书分类号'),读者归还图书功能(Execute RReturnBook '读者号','图书分类号'),读者续借图书功能(Execute RRenewBook '读者号','图书分类号'),读者查询图书借阅情况功能(Execute RQueryBook '读者号'),读者检索的图书信息功能(Execute RIndexBook '关键字')等。具体的功能表现皆在“第三章、图书馆管理系统功能图例”中有详细的图例说明。 本图书馆管理系统谨根据实际需要,创建了七个触发器,就此,创作者对这些触发器做如下说明: 1、tri_Book 功能表现:只有在图书馆内相关书籍尚有库存的情况下,读者才可以进行借阅操作 2、tri_SborrowNum 功能表现:控制学生的图书借阅量在5本以内(包括5本) 3、tri_SrenewBook 功能表现:控制学生续借图书次数在3次以内(包括3次) 4、tri_SreturnBook 功能表现:将学生的还书信息插入RDeleted表 5、tri_TborrowNum 功能表现:控制教师的图书借阅量在10本以内(包括10本) 6、tri_TrenewBook 功能表现:控制学生续借图书次数在4次以内(包括4次) 7、tri_TreturnBook 功能表现:将教师的还书信息插入RDeleted表 本图书馆管理系统设计思路较为肤浅,但在一定程度上实现了图书馆数据库管理系统的实用功能。初次设计数据库,其中肯定会有不足之处,还望读者谅解!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值