《orcale课程设计实训报告.doc》由会员分享,可在线阅读,更多相关《orcale课程设计实训报告.doc(25页珍藏版)》请在三一办公上搜索。
1、保定职业技术学院课程设计报告系计算机信息工程系专业软件开发班级0901姓名学号0401题目指导教师完成时间2010年12月12日指导教师情况姓名技术职称单位指导教师评语:成绩:指导教师签字:年 月 日内容摘要1第一章 绪论2第二章 功能实现2实训七:PL/SQL编程2实训八:存储过程和触发器6实训九:序列、同义词 、程序包11实训十:oracle数据库安全管理14实训十一:数据库的备份和恢复17后记21 内容摘要Oracle是当今最大的数据库公司Oracle(甲骨文)的数据库产品。它的前身是创建于1977年的,位于美国加州的Relational Software公司。该公司与1979年推出了世
2、界上第一个基于SQL标准的关系数据库管理系统Oracle 1 ,同年又推出产品Oracle 2它采用标准的SQL(结构化查询语言),支持多种数据类型,并面向对象。支持UNIX、LINUX、Window NT/2000、OS/2等操作系统平台,支持客户机/服务器工作模式和Web工作模式。数据库是存放数据、表、视图、存储过程等数据库对象的容器。因此,操作数据库对象应先从操作数据库开始。本章介绍数据库操作的基本知识,包括数据库的创建、查看、修改、分离、附加和删除等操作。关键字:存储过程 触发器 视图 游标第一章 绪论Oracle是目前最流行的关系数据库管理系统,被越来越多的用户在信息系统管理、企业数
3、据处理、Internet、电子商务网站等领域作为应用数据的后台处理系统。Oracle从基本概念和实际应用出发,由浅入深、循序渐进地讲述Oracle数据库基础知识,数据库创建,表的操作,数据查询及PL/SQL编程技术,索引和视图的应用,存储过程和触发器的应用,数据库安全管理,备份与恢复等内容。Oracle系统为数据库管理员提供了多种工具来完成数据库的管理工作,既可以使用命令行为创建和删除数据库,也可以通过数据库配置助手DBCA工具来创建和删除数据库。前者适合专业人员使用;后者提供图形化界面,具有操作导航功能。第二章 功能实现实训七:PL/SQL编程1、创建函数“get_total_num”,根据
4、专业代码统计本专业的总人数。创建函数“get_num_percent”,根据不同班级,显示该班级学生人数在本专业学生总人数中的比例。创建函数“get_total_num”create or replace function get_total_num(v_专业代码 班级表.专业代码%type)return numberas v_总人数 班级表.班级人数%type;begin select sum(班级人数) into v_总人数 from 班级表 where 专业代码=v_专业代码; return v_总人数;end get_total_num;创建函数“get_num_percent”cre
5、ate or replace function get_num_percent(v_班级名称 班级表.班级名称%type)return numberas v_班级人数 班级表.班级人数%type; v_总人数 班级表.班级人数%type; v_专业代码 班级表.专业代码%type; v_percent number;begin select sum(班级人数),专业代码 into v_班级人数,v_专业代码 from 班级表 where 班级名称=v_班级名称; select sum(班级人数) into v_总人数 from 班级表 where 专业代码=v_专业代码; v_percent:
6、=v_班级人数/v_总人数; return v_percent;end get_num_percent;2、使用游标调用get_num_percent函数.declare cursor c_班级 is select 班级名称 from 班级表 order by 班级代码; v_percent number(9,2); v_班级名称 班级表.班级名称%type;begin open c_班级; loop fetch c_班级 into v_班级名称; exit when c_班级%notfound; v_percent:=get_num_percent(v_班级名称); dbms_output.
7、put_line(v_班级名称|人数占本专业人数的比例为:|v_percent);end loop;close c_班级;end;(该功能未实现)3、使用游标调用get_total_num函数.declarecursor c_系部 is select * from 系部表 order by 系部代码;cursor c_专业(v_系部代码 系部表.系部代码%type) is select 专业名称,专业代码 from 专业表 where 系部代码=v_系部代码 order by 专业代码;v_系部 系部表%rowtype;v_专业人数 班级表.班级人数%type;v_总人数 班级表.班级人数%t
8、ype;v_专业名称 专业表.专业名称%type;v_专业代码 专业表.专业代码%type;beginopen c_系部;loopfetch c_系部 into v_系部;exit when c_系部%notfound;dbms_output.put_line(系部:|v_系部.系部名称);v_总人数:=0;open c_专业(v_系部.系部代码);loopfetch c_专业 into v_专业名称,v_专业代码;exit when c_专业%notfound;v_专业人数:=get_total_num(v_专业代码);dbms_output.put_line(v_专业名称|专业总人数为:|
9、v_专业人数);v_总人数:=v_总人数+v_专业人数;end loop;close c_专业;dbms_output.put_line(总人数为:|v_总人数);end loop;close c_系部;end;实训八:存储过程和触发器1、在数据库中创建“xs_proc”存储过程,按输入的学号查询相应的学生姓名和班级信息,如果没有该学生,进行异常处理。创建完成后,执行该存储过程。创建“xs_proc”存储过程create or replace procedure xs_proc(xh in 学生表.学号%type, xm out 学生表.姓名%type, bjdm out 学生表.班级代码%t
10、ype)asbeginselect 姓名,班级代码 into xm,bjdm from 学生表where 学号=xh;dbms_output.put_line(姓名:|xm);dbms_output.put_line(班级代码:|bjdm);exceptionwhen no_data_found then dbms_output.put_line(不存在该学生!|xh);end;执行xs_proc存储过程declare v_xm varchar2(10);v_bjdm varchar2(20);beginxs_proc(060101001001,v_xm,v_bjdm);end;2、创建教师副
11、表,用来存放从教师表中删除的数据记录.创建触发器trig_del_js,实现该功能.创建教师副表 create table 教师副表(教师编号 varchar2(20 byte) not null, 教师姓名 varchar2 (10 byte) not null, 性别 varchar2(10 byte) not null, 出生日期 date, 学历 varchar2(20 byte) not null, 职称 varchar2(10 byte) not null, 系部代码 varchar2(10 byte) not null, 备注 varchar2(30 byte) );创建触发器t
12、rig_del_jscreate trigger trig_del_jsafter delete on 教师表for each rowbegininsert into 教师副表values(:old.教师编号,:old.教师姓名,:old.性别,:old.出生日期,:old.学历,:old.职称,:old.系部代码,:old.备注);end del_xs;delete 教师表 where 教师姓名=刘辉;创建触发器,使得对“教师表”的插入、删除、更新操作可以出发对“教师任课表”的插入、删除、更新。创建触发器“tri_stu_ins”create or replace trigger trig_
13、js_insbefore insert on 教师表for each rowbegininsert into 教师任课表(教师编号)values(:new.教师编号);end;insert into 教师表(教师编号,教师姓名,性别,出生日期,学历,职称,系部代码,备注)values (040000000006,张强,女,03-2月-1972,本科,讲师,04,);创建触发器“tri_stu_del”create or replace trigger trig_js_delbefore delete on 教师表for each rowbegindelete 教师任课表 where 教师编号=
14、:old.教师编号;end;delete 教师表 where 教师姓名=张强;创建触发器“tri_stu_upd”create or replace trigger trig_js_updbefore update on 教师表for each rowbeginupdate 教师任课表 set 教师编号=:old.教师编号;end;update 教师表set 教师姓名=刘海军where 教师编号=010000002;实训九:序列、同义词 、程序包1.创建程序包 将统计学生表中不同性别的人数的函数和过程写到包中(1)以system用户登录数据库(2)创建程序包头 stud_packagecrea
15、te or replace package stud_packageasfunction f_count(in_zhic in 教师表.职称%type) return number;procedure p_count(in_zhic in 教师表.职称%type,out_num out number);end stud_package;(3)创建程序包体create or replace package body stud_packageasfunction f_count(in_zhic in 教师表.职称%type)return numberasout_num number;beginif
16、 in_zhic=讲师 thenselect count(职称) into out_numfrom 教师表where 职称=讲师;elseselect count(职称) into out_numfrom 教师表where 职称=副教授;end if;return(out_num);end;procedure p_count(in_zhic in 教师表.职称%type,out_num out number)asbeginif in_zhic=讲师 thenselect count(职称) into out_numfrom 教师表where 职称=讲师;else select count(职称
17、) into out_numfrom 教师表where 职称=副教授;end if;dbms_output.put_line(in_zhic|人数为:|to_char(out_num);end;end stud_package;(4)调用程序包中的函数,统计并输出副教授的人数set serveroutput ondeclarewoman_num number;beginwoman_num:=stud_package.f_count(副教授);end;(具体结果为什么不显示我没找到原因,我认为是function与procedure的区别)(5)调用程序包中的函数,统计并输出讲师的人数set se
18、rveroutput ondeclareman_num number;beginstud_package.p_count(讲师,man_num);end;实训十:oracle数据库安全管理(1) 在“Student”数据库中,创建一个用户stu_user2,并为该用户分配权限. 以SYSTEM用户登录“Student”数据库conn system/aaa 创建用户stu_user2,口令设置为:aaa,默认表空间为system,临时表空间为TEMP,对表空间没有配额.代码如下:create user stu_user2identified by aaadefault tablespace sy
19、stemtemporary tablespace tempQUOTA unlimited on system;创建一个用户概要文件stu_profile,其中资源及口令管理参数设置如下:该用户最多可以建立5个并发的回话连接.连接的最大空闲时间为10分钟.允许用户连接登录数据库失败次数为3.如果用户帐户被锁定,设置被锁定的天数为20.create profile stu_profile limitsessions_per_user 5idle_time 10failed_login_attempts 3password_lock_time 20;将Stu_proflie概要文件分配给用户stu_
20、user2.代码如下:alter user stu_user2 profile stu_profile;授予用户stu_user2连接数据库的系统权限.代码如下:grant create session to stu_user2;将对象SYSTEM成绩表的SELECT权限授予用户stu_user2.代码如下grant select on system.成绩表 to stu_user2;以用户stu_user2登录,查询SYSTEM.成绩表.代码如下:conn stu_use2/aaa;select * from SYSTEM.成绩表;实训十一:数据库的备份和恢复1使用EXPDP命令导出表:使用
21、EXPDP命令导出SYSTEM方案的学生表和班级表(1)在SQL*PLUS环境下,建立转储文件目录,给用户授权.代码如下:conn system/aaa;create directory dump_dir1 as e:dump;grant read,write on directory dump_dir1 to scott;启动DOS命令,进入命令提示符下.导出学生表和班级表,转储文件名为table1.dmp,日志文件名为table1.log。代码如下:expdp system/aaa directory=dump_dir_dir dumpfile=talbe,dmp tables=学生表.班
22、级表logfile=tablog1.log;使用EXPDP命令导出数据库.使用EXPDP命令导出当前使用的数据库Student,转储文件名为student1.dmp.闪回设置:以命令方式连接数据库。代码如下:Conn system/aaa as sysdba;查看当前数据库连接状态是否为“ARCHIVELOG”模式。代码如下:SELECT DBID,NAME,LOG_MODE FROM V$DATABASE;如果为“NOARCHIVELOG”模式,则应该关闭数据库后,以“MOUNT”方式打开数据库,改变当前模式。代码如下:SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALT
23、ER DATABASE ARCHIVELOG;启用FASHBACK DATABASE。代码如下:ALTER DATABASE FLASHBACK ON;更改数据库打开方式为“OPEN”。代码如下:ALTER DATABASE OPEN;后记这次的实训与以往的都不同,这次不是老师给一个项目要我们做,基于课程的安排,这次是做课本中的实训,由于结课时没有及时完成实训,过了好长时间后才开始写代码,看着那些代码似乎很陌生,对于操作过程也生疏了,一切都得从头开始,在实训过程中,得经过一次次的修改与调试才能把结果运行出来,这还是基于上课认真听讲后的效果,如果上课没有认真听课,要调试程序真的很难,我感觉这次实
24、训费了好多功夫,一切都是因为没有在结课时完成的后果。如果当时做完就不用浪费那么多时间了,不过,经过这次实训让我对旧的知识又有了深一层的理解,让我又学会了很多东西。匆匆忙忙的几天终于把实训完成了,虽说不是真正的实训,可比真正的实训也轻松不了多少,相当于一切从零开始,重新自学学的内容,不过经过几天的劳累我们组终于完成了实训,虽说有的代码依旧没有调试出来吧,可我们尽力了,那些没有调试出来的我们是真的不知道错在哪了,该如何修改了。经过这次实训我明白了,作业一定要及时完成,不能拖着,像这次真的浪费了太多的时间。参考文献1 张敏.软件工程教程M.北京:北京航空航天大学出版社,2003.2 郭宁.UML及建模M.北京:清华学出版社,2007.3 王少峰.UML面向对象技术教程M.北京:清华大学出版社,2004.4 郑阿奇.Oracle实用教程M.北京:电子工业出版社,2006.5 蒙祖强龚涛.Orcale10g数据库Java开发M.北京:水利水电出版社,2005.6 刘志成.JSP程序设计案例教程M.北京:清华大学出版社,2007.