`
woainan6042
  • 浏览: 2315 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

学习笔记

阅读更多

/*  创建用户并授权*/
create user LibManager identified by lib;
grant connect,resource to LibManager;
conn LibManager/lib;

/* 建表*/

/*1 用户表 --用户名,密码,用户等级(学生,管理员)*/
Drop table UserInfo;
Create table UserInfo(
userid varchar2(20) not null,
username varchar2(20) not null,
password varchar2(6) not null,
userlevel varchar2(6) not null,
primary key(userid));

insert into UserInfo values('00001','zhangsan','123','学生');
insert into UserInfo values('00002','lisi','123','管理员');

/*2 读者信息表
--学号(职工编号)/*yyyyddddmmccid  yyyy是入学年份,dddd是所属学院的编号,mm是系别编号,cc是班编号,id是班内学号
--姓名,学院,系别,图书借阅最大数量(本),归还期限(月)*/
Drop table ReaderInfo;
Create table ReaderInfo (
readerid varchar2(20) not null,
readertype varchar2(6) not null,/*学生,教师*/
readername varchar2(20) not null,
readerdept varchar2(10) not null,
readermajor varchar2(10) not null,
borrmaxsize number(2) not null,
lendlimit number(2) not null,
primary key(readerid)
);
insert into ReaderInfo values('20080001010101','学生','李四','信息学院','计算机',5,2);

/*3 图书信息表--图书编号,图书所属类别,图书数量(本),图书名称,图书价格,出版社编号,作者姓名*/
Drop table BookInfo;
Create table BookInfo(
bookid varchar2(10) not null,
booktype varchar2(5) not null,
booksize number(2) not null,
bookname varchar2(100) not null,
bookprice number(5,2) not null,
publisherid varchar2(5) not null,
author varchar2(20) not null,
primary key(bookid,booktype));
insert into BookInfo values('00222','0001',5,'MVC模式编程',25.00,'00011','abc');

/*4 图书状态表--图书编号,图书在馆本数,图书状态(在馆,全部借出)*/
drop table BookStatus;
Create Table BookStatus(
bookid  varchar2(10) not null,
bookstatus varchar2(10) not null,
booksize number(2) not null,
primary key(bookid));
insert into BookStatus values('0001','在馆',5);

/*5 出版社信息表--出版社编号,出版社名称,出版社所在地*/
Drop table PublisherInfo;
Create table PublisherInfo(
publisherid varchar2(5) not null,
publishername varchar2(30) not null,
publishloc varchar2(10),
primary key(publisherid));
insert into PublisherInfo values('00011','清华大学出版社','北京');

/*6 图书类别表--图书类别编号,类别名称*/
Drop table BookType;
Create Table BookType(
booktype varchar2(5) not null,
typename varchar2(20) not null,
primary key(booktype));

insert into BookType values('0001','计算机');
insert into BookType values('0002','电子技术');

/*7 借阅记录表--借阅流水号,读者编号,图书编号,借出时间,应归还时间,借阅记录状态(未还,已还)*/
Drop table BorrowRecord;
Create table BorrowRecord(
borrserials number(10) not null,
readerid varchar2(20) not null,
bookid  varchar2(10) not null,
borrdate  Date not null,
beback   Date not null,
recordstatus varchar2(5) not null,
primary key(borrserials)
);
Create sequence BorrowRecord_seq;
--不可有的insert into BorrowREcord values(2223,'20080001010101','0001',sysdate,sysdate+5,'未还');
/*创建存储过程*/

/* 1 过程名称:addReader
输入参数:id,type,name,dept,major,size,limit
输出参数:password
*/
create or replace procedure addReader(
id ReaderInfo.readerid%type,
type ReaderInfo.readertype%type,
name ReaderInfo.readername%type,
dept ReaderInfo.readerdept%type,
major ReaderInfo.readermajor%type,
maxsize ReaderInfo.borrmaxsize%type,
limit ReaderInfo.lendlimit%type,
password out UserInfo.password%type)
as
begin
  /*Reader 表中插入数据*/
   insert into ReaderInfo values(id,type,name,dept,major,maxsize,limit);
  /*随机生成6位密码*/
  SELECT DBMS_RANDOM.STRING('A', 6) into password FROM DUAL;
   insert into UserInfo values(id,name,password,type);
   commit;
exception
when others then
  password:=null;
  rollback;
end;
/

declare
result varchar2(6);
begin
addReader('20080001010102','教师','李四','信息学院','计算机',3,2,result);
dbms_output.put_line('注册成功,密码:'||result);
end;
/

/* 2 过程名称:userLogin
功能:
输入参数:id,password
输出参数:result boolean ; ErrMsg
*/
create or replace procedure userLogin(
id ReaderInfo.readerid%type,
password UserInfo.password%type,
result out boolean,
ErrMsg out varchar2)
as
psw UserInfo.password%type;
begin
    select password into psw from UserInfo where userid =id;
    if psw = password then
result:=true;
ErrMsg:='登陆成功';
    else
result:=false;
ErrMsg:='密码不正确';
end if;
exception
when NO_DATA_FOUND then
result:=false;
ErrMsg:='用户id无效,请确认';
when others then
result:=false;
ErrMsg:='未知故障';
end;
/

declare
result boolean;
resmsg varchar2(20);
begin
userLogin('2008000101010','qemwVe',result,resmsg);
    if result then
dbms_output.put_line(resmsg||',登录成功');
    else
dbms_output.put_line(resmsg||',登录不成功');
    end if;
end;
/

/* 3 过程名称:addBook
输入参数:id,typeid,bsize,bname,bprice,pubid,author
输出参数:result boolean ; ErrMsg */
create or replace procedure addBook(
id BookInfo.bookid%type,
typeid BookInfo.booktype%type,
bsize BookInfo.booksize%type,
bname BookInfo.bookname%type,
bprice BookInfo.bookprice%type,
pubid BookInfo.publisherid%type,
author BookInfo.author%type,
result out boolean,
errmsg out varchar2
) as
begin
    insert into BookInfo values(id,typeid,bsize,bname,bprice,
pubid,author);
    insert into BookStatus values(id,'在馆',bsize);
    commit;
    result:=true;
exception
when others then
    result:=false;
    errmsg:=SQLERRM;
end;
/

declare
result boolean;
resmsg varchar2(20);
begin
addBook('00223','0002',5,'Oracle数据库',25.00,'00088','迅腾国际',result,resmsg);
    if result then
dbms_output.put_line(resmsg||',添加成功');
    else
dbms_output.put_line(resmsg||',添加不成功');
    end if;
end;
/

/* 4 过程名称: alertBook
功能:图书信息修改(管理员权限)
输入参数:v_id,v_type,v_size,v_name,v_price,v_publisherid,v_author
输出参数:result out boolean,errmsg*/

create or replace procedure alterbook(
v_id in BookInfo.bookid%type,
v_type BookInfo.booktype%type,
v_size BookInfo.booksize%type,
v_name BookInfo.bookname%type,
v_price BookInfo.bookprice%type,
v_publisherid BookInfo.publisherid%type,
v_author BookInfo.author%type,
result out boolean,
errmsg out varchar2
)
as
begin
    alterBook(v_id,v_type,v_size,v_name,v_price,v_publisherid,v_author,result,errmsg);
    if result then
update BookInfo set bookid=v_id,booktype=v_type,
                            booksize=v_size,bookname=v_name,
                            bookprice=v_price,publisherid=v_publisherid,
                            author=v_author where bookid=v_id;
commit;
    end if;
exception
    when others then
        rollback;
errmsg:='未知异常';
result:=false;
end alterbook;
/



/* 5 过程名称: borrowBook
功能:借书(管理员权限)
输入参数:rid,bid
输出参数:result out boolean,resultmsg*/

create or replace procedure borrowBook(
rid BorrowRecord.readerid%type,
bid BorrowRecord.bookid%type,
result out boolean,
resultmsg out varchar2
) as
Max_Exception Exception;
No_Book_Borrow Exception;
v_borred number;
v_maxsize ReaderInfo.borrmaxsize%type;
v_limit ReaderInfo.lendlimit%type;
v_bookstatus BookStatus.bookstatus%type;
v_booknum BookStatus.booksize%type;
begin
--获取该用户已借图书数量
    select count(*) into v_borred from BorrowRecord where readerid=rid and recordstatus='未还';
--获取该用户的图书借阅最大数量
    select borrmaxsize,lendlimit into v_maxsize,v_limit from ReaderInfo where readerid=rid;

    if v_borred >= v_maxsize then/*达到最大值,抛出异常*/
raise Max_Exception;
    end if;

--获取该书状态
    select bookstatus into v_bookstatus from BookStatus where bookid = bid;
    if v_bookstatus = '全部借出' then
raise No_Book_Borrow;
    end if;
    /*更新借书记录*/
    insert into BorrowRecord
values(BorrowRecord_seq.nextval,rid,bid,sysdate,add_months(sysdate,v_limit),'未还');
    /*更新图书状态*/
    update Bookstatus set booksize = booksize-1 where bookid = bid;

    select booksize into v_booknum from Bookstatus where bookid = bid;
    if v_booknum = 0 then
update Bookstatus set bookstatus='全部借出' where bookid = bid;
    end if;
    commit;
    result:=true;
    resultmsg:='借书成功';
/*未达到最大值,判断该书状态是否在馆*/
exception
when Max_Exception then
    rollback;
    result:=false;
    resultmsg:='借书失败,借书数量达到最大值,将所借图书归还后才可继续借书';
when No_Book_Borrow then
    rollback;
    result:=false;
    resultmsg:='借书失败,该书已全部借出';
end;
/
------------------测试borrowBook
declare
result boolean;
resmsg varchar2(40);
begin
borrowBook('20080001010101','00222',result,resmsg);
    if result then
dbms_output.put_line(resmsg);
    else
dbms_output.put_line(resmsg);
    end if;
end;
/
分享到:
评论

相关推荐

    2022吴恩达机器学习笔记汇总(共10章节).zip

    2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    PHP个人学习笔记

    PHP个人学习笔记

    CCNA学习笔记 CCNA学习笔记

    CCNA学习笔记 CCNA学习笔记 CCNA学习笔记

    希沃白板学习笔记.pdf

    希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf

    Go学习笔记第四版

    Go 学习笔记 第四版 雨痕 ⼆二〇⼀一四年末 下载:不定期更新,https://github.com/qyuhen/book。 联系:qyuhen@hotmail.com 2012-01-11 开始学习 Go。 2012-01-15 第⼀一版,基于 R60。 2012-03-29 升级到 1.0。 ...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    Linux学习笔记 (华为工程师总结) 完整版PDF

    《Linux学习笔记》这份资料非常全面且详细,从 Linux 常用命令到 Linux 常用操作,再到网络管理、性能优化,几乎覆盖了 Linux 基础学习的方方面面,非常适合初学者入门!这里只是对于常用命令进行了整理,希望可以...

    Learning hard C# 学习笔记

    Learning hard C# 学习笔记

    springcloudalibaba学习笔记

    springcloudalibaba学习笔记

    林轩田-吴恩达机器学习笔记.pdf

    林轩田-吴恩达机器学习笔记.pdf

    Java JDK7学习笔记-光盘

    《Java JDK7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。《Java JDK7学习笔记》针对java se 7新功能全面改版,无论是章节架构...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    Python学习笔记(干货) 中文PDF完整版.pdf

    这份"Python学习笔记"涵盖了从环境搭建到基础语法,再到数据类型和控制结构等关键知识点,旨在为初学者提供全面的学习指导。 首先,1.1章节介绍了Python的基础,包括Python的起源和历史。Python是由Guido van ...

    go语言学习笔记

    go语言学习经典数据,雨痕,go语言学习笔记 第四版 pdf版本

    Python开发基于Flask的在线学习笔记练手项目流程实战_优秀案例实例源代码源码.zip

    基于F|ask的在线学习笔记 ( Wtforms+ passlib+ MySQL+ PymySQL实现) 杨绛在《钱钟书是怎样做读书笔记的》一文中写到:“许多人说,钱钟书记忆力特强,过日不忘他本人却并不以为自己有那么「神」。他只是好读书,肯下功夫...

    cad12学习笔记

    cad12学习笔记cad12学习笔记cad12学习笔记cad12学习笔记cad12学习笔记cad12学习笔记

    良葛格JAVA学习笔记

    随着学习资源的增多,一本高质量的学习笔记显得尤为重要。而今天,我们要介绍的这份《良葛格JAVA学习笔记》便是一份得到广泛好评,深受学习者喜爱的学习资源。 首先,我们不得不提的是这份笔记的作者——“良葛格”...

    contiki 学习笔记

    Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...

Global site tag (gtag.js) - Google Analytics