《数据库原理及应用》实验指导书

实验要求:使用Oracle 11g实现数据库视图、存储过程的创建和使用 实验条件:计算机,Oracle 11g 实验内容:

该实验用学生借书数据库XSBOOK,学生借书数据库相关信息如下: 数据库名:XSBOOK 数据文件名:XSBOOK 日志文件名:XSBOOK _Log

图书借阅系统的数据库为 XSBOOK,该数据库主要由学生(XS)、图书(BOOK)、借阅(JY)3个表构成,依托3个基本表创建视图和存储过程。

表1 学生信息表(XS)表结构

字段名 借书证号 姓名 专业 性别 借书量 类型与宽度 CHAR(8) VARCHAR2(8) VARCHAR2(20) CHAR(2) INT 是否主码 是否允许空值 √ × × × ×

表2 学生信息表(XS)样本数据

借书证号 姓 名 王娟 李宏 朱小波 李小丽 吴涛 专 业 名 计算机 计算机 计算机 英语 英语

表3 图书信息表(BOOK)结构

字段名 ISBN 说 明 默认值为0 × × × × × 性 别 女 男 男 女 男 借 书 量 4 3 3 2 0 类型与宽度 是否主码 是否允许空值 CHAR(16) √ × 说明 书名 作者 出版社 价格 复本量 库存量 VARCHAR2(30) VARCHAR2(8) VARCHAR2(20) FLOAT INT INT × × × × × ×

× × × × × × 当对书进行插入、删除时,复本量应等于库存量 表4 图书信息表(BOOK)样本数据

ISBN 书 名 作 者 出 版 社 价格 复本量 库存量 5 10 5 12 10 8 2 9 2 10 6 7 7-111-06359-7 Web站点安全 刘宗田 机械工业出版社 17 7-113-04908-7 ASP.NET程序设计 陈惠贞 机械工业出版社 55 7-115-07715-0 ASP & WEB数据库 王国荣 人民邮电出版社 59 7-115-10162-0 计算机网络教程 谢希仁 人民邮电出版社 28 7-302-03035-9 C语言程序设计 谭浩强 清华大学出版社 48 7-505-37908-9 WEB程序设计 吉根林 电子工业出版社 25

表5 借阅表(JY)结构

字段名 类型与宽度 是否主码 是否允许空值 借书证号 CHAR(8) ISBN CHAR(16) × × √ × × × × ×

表6 借阅表(JY)样本数据

借书证号 ISBN 索书号 说明 当借一本书时,BOOK的库存量应减1,同时,借书人的借书量应加1;当还一本书时,BOOK的库存量应加1,同时,借书人的借索书号 CHAR(10) 借书时间 DATE 书量应减1 借书时间

1、视图的创建和使用

7-111-06359-7 7-111-06359-7 7-115-07715-0 7-505-37908-9 7-111-06359-7 7-113-04908-7 7-302-03035-9 7-302-03035-9 7-302-03035-9 7-115-10162-0 7-115-10162-0 7-302-03035-9 2011-03-01 2011-05-10 2011-05-10 2011-09-01 2011-03-10 2011-03-11 2011-03-11 2011-04-10 2011-04-10 2011-05-19 2011-04-19 2011-04-19 (1)把3个基本表联系起来,方便需要3表关联的功能使用。 SQL命令如下: CREATE VIEW RBL

AS

SELECT XS.借书证号, JY.索书号, JY.ISBN, BOOK.书名,

BOOK.出版社,BOOK.价格, JY.借书时间 FROM XS

INNER JOIN JY ON XS.借书证号=JY.借书证号 INNER JOIN BOOK ON BOOK.ISBN=JY.ISBN

(2) 功能测试 SELECT * FROM RBL

观察3表关联的字段数据正确性。 2、存储过程的创建和使用 ? 参数

借书证号(in_ReaderID)、ISBN(in_ISBN)、图书ID(in_BookID)、执行信息(out_str)。

? 实现功能

根据存储过程的前3个参数,实现读者图书“借阅”。第4个参数为输出参数,将存储过程的执行情况以字符串形式赋予此参数。 ? 编写思路

(1)根据“借书证号”查询XS表是否存在该读者,如果不存在,则将输出参数out_str赋值为“该读者不存在”并返回0,存储过程结束,表示不能借书。 (2)根据“ISBN”查询BOOK中是否存在该图书,如果不存在,则将输出参数赋值为“该图书不存在”并返回0,存储过程结束,表示不能借书。

(3)根据“借书证号”查询XS表中该读者的借书量。如果借书量=5,则将输出参数赋值为“读者借书量不能大于5”并返回0,存储过程结束,表示不能借书。 (4)根据“ISBN”查询BOOK表中该图书的库存量。如果库存量=0,则将输出参数赋值为“图书库存量为0”并返回0,存储过程结束,表示不能借书。 (5)查询JY表中该读者是否已经借阅该图书,如果已经借过,则将输出参数赋值为“读者已经借过该书”并返回0,存储过程结束,表示不能借书。

(6)查询JY表中该索书号是否已经存在,如果存在则将输出参数赋值为“该索书号已存在”并返回0,存储过程结束,表示不能添加借书记录。

(7)使JY表增加一条该读者借书记录;XS表中该读者的借书量加1;BOOK表中该图书(对应ISBN)记录的库存量减1。存储过程结束,将输出参数赋值为“借书成功”并返回1,表示借书成功。

(8)如果存储过程执行过程中遇到错误,则回滚之前进行的操作,并将输出参数赋值为“执行过程中遇到错误”并返回0,表示存储过程执行过程中遇到错误,回滚到执行存储过程前的状态。 ? 实现方法 PL/SQL如下:

CREATE OR REPLACE PROCEDURE Book_Borrow (in_ReaderID in char, in_ISBN in char, in_BookID in char, out_str out char) IS

Ct_Reader

Number(10);

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4