数据库原理实验三_第1页
数据库原理实验三_第2页
数据库原理实验三_第3页
数据库原理实验三_第4页
数据库原理实验三_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库原理及应用实验报告 实验名称:存储过程 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安1505班 姓 名: 学 号:512015 联系电话: 电子邮件: 实验地点:东6E501 实 验 日 期:  2017年5月10日 实验报告日期:2017年 5月 11日成绩:_8一、实验目的(1)了解存储过程的概念、优点(2)熟练掌握创建存储过程的创建方法(3)熟练掌握存储过程的调用方法2、 实验平台Oracle 11g3、 实验步骤、出现的问题及解决方案(不能解决的将问题列出)(1) 实验步骤1)建立存储过程完成图书管理系

2、统中的借书功能。 功能要求:l 借书时要求输入借阅流水号,借书证号,图书编号。(即该存储过程有3个输入参数)l 借书时,借书日期为系统时间。l 图书的是否借出改为是2)建立存储过程完成图书管理系统中的预约功能。l 预约时要求输入预约流水号,借书证号,ISBN。(即该存储过程有3个输入参数)l 存储过程先检查输入的ISBN版本的图书是否都已借出,如果是则进行预约,否则提示“该书目有可借图书,请查找”。l 预约时间为系统时间。3)建立存储过程完成图书管理系统中的还书功能。l 还书时要求输入借书证号,图书编号,罚款分类号(即该存储过程有3个输入参数)。l 还书日期为系统时间。l 图书的是否借出改为否

3、。(2) 问题及解决方案1)问题一:步骤一无法执行原因:已创建的table中无“借书”项解决方案:将原代码中的“借书”改为“借阅”2) 问题二:步骤二中出现无法识别的符号原因:将英文分号误写为中文分号解决方案:修正为英文分号“;”4、 思考与总结(1) 书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(2) 注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(3) 注意空格的使用,避免出现缺少或多余的空格,造成语法错误5、 附:实验完整源代码1、CREATE OR REPLACE PROCEDURE PRO_借书功能(VAL_借阅流水号 IN 借阅.借阅流水号%TYPE,

4、VAL_借书证号 IN 借阅.借书证号%TYPE,VAL_图书编号 IN 借阅.图书编号%TYPE)ASBEGININSERT INTO 借阅(借阅流水号,借书证号,图书编号,借书日期)VALUES (VAL_借阅流水号,VAL_借书证号,VAL_图书编号,TO_CHAR(SYSDATE(),'YYYY/MM/DD') );UPDATE 图书 SET 是否借出='是' WHERE 图书.图书编号 =VAL_图书编号;DBMS_OUTPUT.PUT_LINE(' 本次借书操作完成! ');END;2、CREATE OR REPLACE PROCED

5、URE PRO_预约功能(Y_预约流水号 IN 预约.预约流水号%TYPE,Y_借书证号 IN 预约.借书证号%TYPE,Y_ISBN IN 图书.ISBN%TYPE)ASY_NUMBER BINARY_INTEGER;BEGINSELECT COUNT(*) INTO Y_NUMBER FROM 图书 WHERE 图书.ISBN=Y_ISBN AND 图书.是否借出='否'IF Y_NUMBER=0THENINSERT INTO 预约(预约流水号,借书证号,ISBN,预约时间)VALUES(Y_预约流水号,Y_借书证号,Y_ISBN,TO_CHAR(SYSDATE(),

6、9;YYYY/MM/DD') ;DBMS_OUTPUT.put_line('可执行预约!');ELSEDBMS_OUTPUT.put_line('该书可借,请查找!');END IF;END;3、CREATE OR REPLACE PROCEDURE PRO_还书功能(VAL_借书证号 IN 借阅.借书证号%TYPE,VAL_图书编号 IN 借阅.图书编号%TYPE,VAL_罚款分类号 IN 借阅.罚款分类号%TYPE)ASVAL_TIME DATE;BEGINSELECT SYSDATE INTO VAL_TIME FROM DUAL;UPDATE 借

7、阅 SET 归还日期=VAL_TIME WHERE 借书证号 =VAL_借书证号 AND 借阅.图书编号=VAL_图书编号;UPDATE 图书 SET 是否借出='否' WHERE 图书.图书编号 =VAL_图书编号;UPDATE 借阅 SET 罚款分类号=VAL_罚款分类号 WHERE 借书证号 =VAL_借书证号 AND 借阅.图书编号=VAL_图书编号;DBMS_OUTPUT.PUT_LINE(' 本次还书操作完成! ');END;数据库原理及应用实验报告 实验名称:触发器 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安

8、1505班 姓 名:李 维 学 号:5120155364 联系电话电子邮件: 实验地点:东6E501 实 验 日 期:  2017年5月10日 实验报告日期:2017年 5月 10日成绩:_一、实验目的(1)了解触发器的概念、优点(2)掌握触发器的方法和步骤(3)掌握触发器的使用4、 实验平台Oracle 11g5、 实验步骤、出现的问题及解决方案(不能解决的将问题列出)(3) 实验步骤1) 通过序列和触发器实现借阅表中借阅流水号字段的自动递增。2) 通过序列和触发器实现预约表中预约流水号字段的自动递增3) 修改实验三借书功能的

9、存储过程。 该存储过程要求:l 借书时输入借书证号,图书编号。(即该函数有2个输入参数)l 借书时,借书日期为系统时间。 *该存储过程主体部分只有insert into语句。 4)建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为是。5)修改实验三还书功能的存储过程。 该存储过程要求:l 还书时输入借书证号,图书编号。(即该函数有2个输入参数)l 还书时,还书日期为系统时间。 *该存储过程主体部分只有一条UPDATE语句。 6)建立与还书存储过程相对应的触发器,当借阅表中填入还书日期时,该触发器触发,自动修改所还图书的是否借出为否。(4)

10、问题及解决方案1) 问题一:步骤一中无法识别“seq_id”标识符原因:未创建seq_id序列解决方案:先创建该序列2)问题二:步骤3无法执行原因:已创建的table中无“借书”项解决方案:将原代码中的“借书”改为“借阅”3)问题三:步骤二中出现无法识别的符号原因:将英文分号误写为中文分号解决方案:修正为英文分号“;”4)问题四:原因:变量赋值过程中使用了错误的赋值语句解决方案:将bnum改为图书编号5、 思考与总结(4) 在创建trigger之前应先创建sequence,避免出现序列号无法识别的错误(5) 书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(6) 注意区分中英文符号,

11、避免出现符号无法识别以及程序没有结尾等错误(7) 注意区别where和having的用法(8) 注意空格的使用,避免出现缺少或多余的空格,造成语法错误6、 附:实验源代码(1)create sequence seq_借阅start with 8increment by 1nomaxvaluenocyclenocache;create or replace trigger tr_借阅流水号before insert on 借阅for each row begin select seq_借阅.nextval into :new.借阅流水号 from dual; end; (2)create seq

12、uence seq_预约start with 8increment by 1nomaxvaluenocyclenocache;create or replace trigger tr_预约流水号before insert on 预约for each row begin select seq_预约.nextval into :new.预约流水号 from dual; end; (3)create or replace procedure p_borrow_book_xg(p_jszh in number,p_tsbh in number)asv_sfjc 图书.是否借出%type;begin s

13、elect 是否借出 into v_sfjc from 图书 where 图书编号=p_tsbh; if v_sfjc='否' then insert into 借阅(借书证号,图书编号,借书日期) values(p_jszh,p_tsbh,to_date(to_char(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD'); -update 图书 set 是否借出='是' where 图书编号=p_tsbh; commit; else dbms_output.put_line('该图书已经借出!'

14、;); end if;end;(4)create or replace trigger tr_借书before insert on 借阅for each row begin if inserting then update 图书 set 是否借出='是' where 图书编号=:new.图书编号; select seq_借阅.nextval into :new.借阅流水号 from dual; end if; end;(5)create or replace procedure p_return_图书(p_借书证号 in number,p_图书编号 in number)asbegin update 借阅 set 归还日期=to_date(to_char(sysdate,'YYYY/MM/DD'),'YYYY/MM/DD'), 罚款分类号=p_罚款分类号 where 借书证号=p_借书证号 and 图书编号=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论