数据库原理实验三

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

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


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

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


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