数据库实验六---存储过程
什么是存储过程?
是一组被编译在一起的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语句了.其他的目前还没有发现有什么别的问题,如果有人看到了我的问题,欢迎指出.
数据库实验六---存储过程相关推荐
- 数据库 实验六 存储过程
存储过程 答案链接链接 2 通过本实验的学习,使学生掌握掌握存储过程的定义和使用方法. 二.实验内容 (1) 删除指定法人在指定日期前的贷款记录.要求法人名称和日期为输入参数. (2) 查 ...
- 数据库实验六 存储过程
1 利用系统存储过程列出当前SQL Server实例中的所有数据库. 2 创建存储过程,查询学生基本信息. 3 创建存储过程,查询特定同学的平均成绩. 4 创建存储过程,查询特定课程的平均成绩. 5 ...
- 头歌数据库实验六:存储过程
转载于头歌数据库实验六:存储过程头歌数据库实验六:存储过程 - Yenshthen研学绅头歌数据库实验六:存储过程 第1关:增加供应商相关列sqty use demo;#代码开始 #在S表中增加一列供 ...
- 实验六——存储过程实验
实验六--存储过程实验 一.实验题目 二.实验目的 三.实验过程 (一)准备数据表 (二)存储过程实验 [存储过程简介] [存储过程优点] 1.创建存储过程 2.查看存储过程 3.修改存储过程 4.删 ...
- MySQL数据库实验六 简单数据库应用系统设计与实现
★观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,. 一.实验目的 1.理解并能运用数据库设计的常见 ...
- 数据库实验六:完整性语言实验
数据库实验六 1.参照实验一供应商的表结构,创建供应商表(Supplier1)时定义实体完整性(列级实体完整性). 2.参照实验一供应商的表结构,创建供应商表(Supplier2)时定义实体完整性(表 ...
- 数据库实验六综合实验-水果商店进阶一
文章目录 一.实验目的与要求: 二.实验内容 1. 修正订单详情表orderitems中的水果价格与水果表fruits中的价格一致. 2. 在订单详情表orderitems插入新订单时自动获得水果价格 ...
- 数据库实验六 数据库的完整性
实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...
- 数据库实验七 存储过程实验
1.实验目的 掌握数据库存储过程的设计和使用方法. 2.实验内容和要求 存储过程的定义,存储过程运行,存储过程更名,存储过程删除. 3.实验步骤 (1)定义一个存储过程proc1,更新所有订单( ...
最新文章
- linux source命令
- Windows内核驱动中操作文件
- java中List的toArray方法
- 一个高性能RPC框架原理剖析
- Perl的输出:print、say和printf、sprintf
- BZOJ 2326 数学作业(分段矩阵快速幂)
- Linux按文件内容查找文件
- C++虚继承(十) --- 谈谈陈皓遗留的问题
- 排序算法——插入排序
- check corners_免费下载:将Mac样式的Hot Corners添加到Windows 10
- C 中命名空间的五大常见用法
- 为什么建议使用count(*)来统计数据行数
- Asp.net 基础(二)
- php debug pit,start.php
- 推荐一个小工具 -- 微信QQ防撤回
- usb转rs485 linux驱动下载,USB转RS485串口驱动
- pyecharts 字体大小调整
- 北邮带研究生的计算机导师有哪些,GitHub - sunichi/BUPTNiceMentors: 北邮研究生导师口碑榜...
- EXIT: Extrapolation and Interpolation-based Neural Controlled Differential Equations for Time-series
- ps裁剪和裁切的区别_PS剪切、裁剪、裁切的区别
热门文章
- 基于微信小程序的国产动漫论坛小程序
- Oracle数据库字符集问题解决方案大全
- 达梦中的连接查询方式
- 从4G到5G,从物联网到云计算 通信的下一个引爆点在哪里?
- 践行社会责任 | 华云数据荣登2021新型实体企业百强榜 用创新技术服务实体经济
- macbook配置java环境变量_MAC安装JDK及环境变量配置
- 为迎接南京大学2012年110周年校庆 在京校友名录重编工作开始了
- 教师节到了,用Python做了个非常好用的学生点名系统
- 面向对象开发期末复习概述(七)
- 苹果手机数据线充不了电_苹果手机充不进电怎么回事?iPhone充电没反应解决方法...