数据库编程实验

本文详细介绍了如何创建和管理存储过程,包括无参与带参的存储过程,如查询计算机系读者借阅信息、修改存储过程参数、图书借阅信息查找等。此外,实践了游标操作,如显示借阅记录和修改图书价格。通过这些实例,读者将理解存储过程和游标的实用性和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的

1、 掌握存储过程的概念、优点、特点及用途;

2、 掌握创建、执行、修改和删除存储过程的方法;

3、 掌握创建游标和使用游标修改表中数据的方法。

实验内容

(一)附加上次实验所创建的数据库“db_Library”,并回顾该库的数据表信息。

(二)练习创建和管理存储过程

1、创建一个名为“PROC_系部读者借阅信息”的无参存储过程,要求显示计算机系读者 2010-

以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段。

创建完成之后,执行上述存储过程,观察执行结果。

2、修改上述的存储过程为带参的存储过程,要求根据所提供的系部名称和时间,查询出该系部在该时间之后借阅了图书的读者信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段, 并按照读者姓名升序排列,并将读者的总数作为输出参数返回。

创建完成之后,执行上述存储过程,观察执行结果。

3、创建一个名为“Proc_图书借阅信息”的存储过程,要求根据所提供的图书名称或编号,查询出借阅了该图书的读者信息,包括“读者编号”、“读者姓名”、“学号”、“借阅日期”,并返回该存储过程的执行状态。(其中,图书名称或编号可能为空,图书名称采用模糊查询)

创建完成之后,执行上述存储过程,观察执行结果。

4、创建一个名为“Proc_删除读者信息”的存储过程,要求根据所提供的读者编号,删除该编号所对应的读者,如果不存在此编号的读者,则显示“该编号的读者不存在!”。创建完成之后,执行上述存储过程,观察执行结果。

5、创建一个名为“Proc_修改借阅信息”的存储过程,要求根据所提供的读者编号和天数,将该读者的归还日期增加相应的天数,如果不存在该读者的借阅信息,则显示“该读者没有借阅图书!”。创建完成之后,执行上述存储过程,观察执行结果。

6、删除存储过程“Proc_修改借阅信息”。

(三)练习创建游标

1、定义一个游标,将有借书记录的读者的借阅信息(包括读者编号、读者姓名、书名、借阅日期)显示出来。

2、通过游标将图书信息表中记录号为 5 的图书的单价改为 50。

1.创建一个名为“PROC_系部读者借阅信息”的无参存储过程,要求显示计算机系读者 2010-1-2以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段。创建完成之后执行上述存储过程,观察执行结果。

create proc PROC_系部读者借阅信息_ as

select 姓名,图书编号,借阅日期

from tb_borrow,tb_reader

where tb_reader.读者编号=tb_borrow.读者编号 and

系部='计算机系'

and 借阅日期>'2010-1-1'

exec PROC_系部读者借阅信息_

2.修改上述的存储过程为带参的存储过程,要求根据所提供的系部名称和时间,查询出该系部在该时间之后借阅了图书的读者信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段, 并按照读者姓名升序排列,并将读者的总数作为输出参数返回。创建完成之后,执行上述存储过程,观察执行结果。

go

alter proc PROC_系部读者借阅信息_

@x int output 

as

begin 

select 姓名,图书编号,借阅日期

from tb_borrow,tb_reader

where 系部='计算机系'

and tb_reader.读者编号=tb_borrow.读者编号

and  借阅日期>='2011-09-20'

group by 姓名,图书编号,借阅日期

order by 姓名

select @x=count(姓名)

from tb_borrow,tb_reader

where 系部='计算机系'

and tb_reader.读者编号=tb_borrow.读者编号

and  借阅日期>='2011-09-20'

group by 姓名,图书编号,借阅日期

order by 姓名

end

declare @x1 int

exec PROC_系部读者借阅信息_ @x1 output

print @x1

3.创建一个名为“Proc_图书借阅信息”的存储过程,要求根据所提供的图书名称或编号,查询出借阅了该图书的读者信息,包括“读者编号”、“读者姓名”、“学号”、“借阅日期”,并返回该存储过程的执行状态。(其中,图书名称或编号可能为空,图书名称采用模糊查询)创建完成之后,执行上述存储过程,观察执行结果。

go

create Proc Proc_图书借阅信息

@x1 int output

as begin

declare @x char(10)

select @x=书名 from tb_book

where 书名 like'%英语%'

select

tb_reader.读者编号,姓名,学号,借阅日期

from tb_borrow,tb_reader,tb_book

where tb_borrow.读者编号=tb_reader.读者编号

and tb_borrow.图书编号=tb_book.图书编号

and 书名=@x

set @x1=1

end

declare @x2 int

exec Proc_图书借阅信息 @x2 output

print @x2

if (@x2)=1

print '成功执行存储过程'

else 

print'失败执行存储过程'

4、创建一个名为“Proc_删除读者信息”的存储过程,要求根据所提供的读者编号,删除该编号所对应的读者,如果不存在此编号的读者,则显示“该编号的读者不存在!”。创建完成之后,执行上述存储过程,观察执行结果。

go

create proc Proc_删除读者信息

@a char(6)

as

begin

if exists(select 读者编号 from tb_reader where 读者编号 =@a)

begin

delete from tb_reader where 读者编号=@a

delete from tb_borrow where 读者编号=@a

print '删除信息成功!'

end

else

print '该编号读者不存在!'

end

exec Proc_删除读者信息 'R10007'

5、创建一个名为“Proc_修改借阅信息”的存储过程,要求根据所提供的读者编号和天数,将该读者的归还日期增加相应的天数,如果不存在该读者的借阅信息,则显示“该读者没有借阅图书!”。创建完成之后,执行上述存储过程,观察执行结果。

go 

create  proc Proc_修改借阅信息

@b char(8),@c int

as

begin

if exists(select *from tb_borrow where 读者编号=@b)

begin

update tb_borrow set 归还日期=dateadd(day,@c,归还日期)

where 读者编号=@b

end

else

print '该读者没有借阅图书'

end

exec Proc_修改借阅信息 @b='R10003',@c=5

6、删除存储过程“Proc_修改借阅信息”。

drop proc Proc_修改借阅信息

7、定义一个游标,将有借书记录的读者的借阅信息(包括读者编号、读者姓名、书名、借阅日期)显示出来。

declare @x1 char(10),@x2 char(10),@x3 char(10),@x4 date

declare cur cursor scroll

for 

select 姓名,tb_borrow.读者编号,书名,借阅日期

from tb_book,tb_borrow,tb_reader

where tb_borrow.读者编号=tb_reader.读者编号

and tb_borrow.图书编号=tb_book.图书编号

for read only

open cur

fetch from cur into @x1,@x2,@x3,@x4

while (@@FETCH_STATUS=0)

begin

print '读者姓名'+@x1+'  '+'读者编号'+ cast(@x2 as char(10))

+'  '+ '书名字'+@x3+'  '+'借阅日期'+cast(@x4 as char(10))

fetch from cur into @x1,@x2,@x3,@x4

end

close cur

deallocate cur

8、通过游标将图书信息表中记录号为 5 的图书的单价改为 50。

declare cur1 cursor scroll

for select * from tb_book for 

update of tb_book.定价

open cur1

#将游标定位到五号

fetch absolute 5 from cur1

update tb_book

set tb_book.定价=50

#游标定位 current of

where current of  cur1

#显示修改后的记录

fetch  absolute 5 from cur1

close cur1

deallocate cur1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

䔴䔴䔴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值