数据库原理实验三_数据库原理第三次实验

2020-02-28 其他范文 下载本文

数据库原理实验三由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据库原理第三次实验”。

数据库原理及应用实验报告

实验名称:存储过程 实验类型:验证型 实验环境: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)AS BEGIN INSERT 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)AS Y_NUMBER BINARY_INTEGER;BEGIN SELECT COUNT(*)INTO Y_NUMBER FROM 图书 WHERE 图书.ISBN=Y_ISBN AND 图书.是否借出='否';IF Y_NUMBER=0 THEN INSERT INTO 预约(预约流水号,借书证号,ISBN,预约时间)VALUES(Y_预约流水号,Y_借书证号,Y_ISBN,TO_CHAR(SYSDATE(),'YYYY/MM/DD'));DBMS_OUTPUT.put_line('可执行预约!');ELSE DBMS_OUTPUT.put_line('该书可借,请查找!');END IF;END;

3、CREATE OR REPLACE PROCEDURE PRO_还书功能(VAL_借书证号 IN 借阅.借书证号%TYPE, VAL_图书编号 IN 借阅.图书编号%TYPE, 4 VAL_罚款分类号 IN 借阅.罚款分类号%TYPE)AS VAL_TIME DATE;BEGIN SELECT 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 联系电话:*** 电子邮件: 实验地点:东6E501 实 验 日 期: 2017年5月10日实验报告日期:2017年 5月 10日

成绩:__________________________

一、实验目的(1)了解触发器的概念、优点(2)掌握触发器的方法和步骤(3)掌握触发器的使用

四、实验平台

Oracle 11g

五、实验步骤、出现的问题及解决方案(不能解决的将问题列出)(3)实验步骤

1)通过序列和触发器实现借阅表中借阅流水号字段的自动递增。

2)通过序列和触发器实现预约表中预约流水号字段的自动递增

3)修改实验三借书功能的存储过程。

该存储过程要求: 借书时输入借书证号,图书编号。(即该函数有2个输入参数)

 借书时,借书日期为系统时间。

*该存储过程主体部分只有insert into语句。

4)建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为‘是’。

5)修改实验三还书功能的存储过程。

该存储过程要求:

 还书时输入借书证号,图书编号。(即该函数有2个输入参数) 还书时,还书日期为系统时间。

*该存储过程主体部分只有一条UPDATE语句。

6)建立与还书存储过程相对应的触发器,当借阅表中填入还书日期时,该触发器触发,自动修改所还图书的是否借出为‘否’。

2(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 8 increment by 1 nomaxvalue nocycle nocache;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 8 increment by 1 nomaxvalue nocycle nocache;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)as v_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)as begin

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 row begin

if updating then

update 图书 set 是否借出 = '否' where 图书编号 = :new.图书编号;

end if;end;

《数据库原理实验三.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
数据库原理实验三
点击下载文档
相关专题 数据库原理第三次实验 原理 数据库 数据库原理第三次实验 原理 数据库
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文