数据库原理实验三.doc

上传人:xin****828 文档编号:6661492 上传时间:2020-03-01 格式:DOC 页数:15 大小:126.45KB
返回 下载 相关 举报
数据库原理实验三.doc_第1页
第1页 / 共15页
数据库原理实验三.doc_第2页
第2页 / 共15页
数据库原理实验三.doc_第3页
第3页 / 共15页
点击查看更多>>
资源描述
数据库原理及应用实验报告 实验名称:存储过程 实验类型:验证型 实验环境:oracle 11g 指导教师:陈 骏 专业班级:信安1505班 姓 名: 学 号:512015 联系电话: 电子邮件: 实验地点:东6E501 实 验 日 期:2017年5月10日 实验报告日期:2017年5月11日成绩:_8一、实验目的(1)了解存储过程的概念、优点(2)熟练掌握创建存储过程的创建方法(3)熟练掌握存储过程的调用方法2、 实验平台Oracle 11g3、 实验步骤、出现的问题及解决方案(不能解决的将问题列出)(1) 实验步骤1)建立存储过程完成图书管理系统中的借书功能。 功能要求:l 借书时要求输入借阅流水号,借书证号,图书编号。(即该存储过程有3个输入参数)l 借书时,借书日期为系统时间。l 图书的是否借出改为是2)建立存储过程完成图书管理系统中的预约功能。l 预约时要求输入预约流水号,借书证号,ISBN。(即该存储过程有3个输入参数)l 存储过程先检查输入的ISBN版本的图书是否都已借出,如果是则进行预约,否则提示“该书目有可借图书,请查找”。l 预约时间为系统时间。3)建立存储过程完成图书管理系统中的还书功能。l 还书时要求输入借书证号,图书编号,罚款分类号(即该存储过程有3个输入参数)。l 还书日期为系统时间。l 图书的是否借出改为否。(2) 问题及解决方案1)问题一:步骤一无法执行原因:已创建的table中无“借书”项解决方案:将原代码中的“借书”改为“借阅”2) 问题二:步骤二中出现无法识别的符号原因:将英文分号误写为中文分号解决方案:修正为英文分号“;”4、 思考与总结(1) 书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(2) 注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(3) 注意空格的使用,避免出现缺少或多余的空格,造成语法错误5、 附:实验完整源代码1、CREATE OR REPLACE PROCEDURE PRO_借书功能(VAL_借阅流水号 IN 借阅.借阅流水号%TYPE,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 PROCEDURE 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(),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 借阅 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 指导教师:陈 骏 专业班级:信安1505班 姓 名:李 维 学 号:5120155364 联系电话:18281686860 电子邮件: 实验地点:东6E501 实 验 日 期:2017年5月10日 实验报告日期:2017年5月10日成绩:_一、实验目的(1)了解触发器的概念、优点(2)掌握触发器的方法和步骤(3)掌握触发器的使用4、 实验平台Oracle 11g5、 实验步骤、出现的问题及解决方案(不能解决的将问题列出)(3) 实验步骤1) 通过序列和触发器实现借阅表中借阅流水号字段的自动递增。2) 通过序列和触发器实现预约表中预约流水号字段的自动递增3) 修改实验三借书功能的存储过程。 该存储过程要求:l 借书时输入借书证号,图书编号。(即该函数有2个输入参数)l 借书时,借书日期为系统时间。 *该存储过程主体部分只有insert into语句。 4)建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为是。5)修改实验三还书功能的存储过程。 该存储过程要求:l 还书时输入借书证号,图书编号。(即该函数有2个输入参数)l 还书时,还书日期为系统时间。 *该存储过程主体部分只有一条UPDATE语句。 6)建立与还书存储过程相对应的触发器,当借阅表中填入还书日期时,该触发器触发,自动修改所还图书的是否借出为否。(4) 问题及解决方案1) 问题一:步骤一中无法识别“seq_id”标识符原因:未创建seq_id序列解决方案:先创建该序列2)问题二:步骤3无法执行原因:已创建的table中无“借书”项解决方案:将原代码中的“借书”改为“借阅”3)问题三:步骤二中出现无法识别的符号原因:将英文分号误写为中文分号解决方案:修正为英文分号“;”4)问题四:原因:变量赋值过程中使用了错误的赋值语句解决方案:将bnum改为图书编号5、 思考与总结(4) 在创建trigger之前应先创建sequence,避免出现序列号无法识别的错误(5) 书写存储语句时,应注意涉及的表格和属性名应与创建表格时相同(6) 注意区分中英文符号,避免出现符号无法识别以及程序没有结尾等错误(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 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; (3)create or replace procedure p_borrow_book_xg(p_jszh in number,p_tsbh in number)asv_sfjc 图书.是否借出%type;begin select 是否借出 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(该图书已经借出!); 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 图书编号=p_图书编号; update 图书 set 是否借出=否 where 图书编号=p_图书编号; commit; end;(6)create or replace trigger tr_还书 after update on 借阅 for each rowbegin if updating then update 图书 set 是否借出 = 否 where 图书编号 = :new.图书编号; end if;end;7
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!