1/7中南大学数据库实验报告姓名:高翔班级:电子1203学号:0909122714指导老师:张祖平实验时间:2014.042/7一、实验目的与要求1.熟悉ORACLE的运行环境,在CLIENT端进行联接设置与服务器联通,进入ORACLE的SQL*PLUS的操作环境,进一步建立表格,并考虑主键,外部键,值约束。2.熟悉在SQL*PLUS环境下进行数据记录查询、更新与删除,其中查询考虑简单查询,复杂查询,嵌套查询。3.熟悉在SQL*PLUS环境下进行数据视图及权限控制的操作。4.本实验主要是熟悉在SQL*PLUS环境下数据库触发器的建立及作用,了解大型数据库编程。二、实验环境硬件:主频2GHz以上服务器(内存2GB以上、硬件空闲2.2GB以上),主频1GHz以上微机,内存1GB以上。软件:WINDOWSXP/2000/2003/或win7/2008等,如操作系统是SERVER版可安装ORACLE/9i/10g/11g/12CFORNT/WINDOWS(注意在32位与64位的区别,可选企业版)如果Windows非server如XP/win7等,安装时请选择个人版(PERSONAL)三、实验内容及步骤1.熟悉ORALCE环境并练习SQL的定义1)打开控制面板,――管理工具――服务―+++++++36―启动OracleServiceslab或者如图通过界面或资源管理器右键找到管理。再找服务:启动的服务如下或有OracleService****的服务。2)从桌面执行SQL*PLUS或在程序中3)输入:system/manager4)在SQL状态输入建立用户命令:createuserusernameidentifiedbypassword;3/7其中username与password不要数字开头,用户名username中按规则加班级学号后缀如:U_301表示3班学号尾数为1号的用户。5)给用户授权:grantresource,connecttousername;6)连接用户:connectusername/password在SQL就可以建表等操作了7)根据要求建立如下表,插入数据定义基本表格dept_?????(部门)与emp_?????(员工),关系模式如下:Dept_?????(DEPTNOchar(4)Primarykey,NAMEVARCHAR2(32),LOCVARCHAR2(32)in(长沙,深圳),telvarchar2(13)以0731,0755开头)Emp_?????(EMPNOchar(10)primarykey,ENAMEVARCHAR2(32),JOBVARCHAR2(12),MGRchar(10)foreignkey,HIREDATEDATE’19920101’,SALNUMBER(7,2),COMMNUMBER(7,2),DEPTNOchar(4)foreignkey,sal+comm=5000)注意表的命名规则插入样本数据每个表至少插入10条以上的记录,要求在emp中要有自己的信息,可以学号为职工号,可以参考ORACLE中SCOTT用户下dept的数据(编号与地址、电话需要修改)。Emp中的数据需要参考自己的学号等信息进行修改。DEPTNODNAMELOC-----------------------------------10ACCOUNTINGNEWYORK20RESEARCHDALLAS30SALESCHICAGO40OPERATIONSBOSTON2.1.查询所有职工的记录2.查询所有部门的记录,并按部门号升序排列3.查询有自己姓名的记录4.查询’李四’的EMPNO,ENAME,JOB5.查询RESEARCH部门所有的职工记录4/76.查询RESEARCH部门各职工的入司年数(Ceil(sysdate-HIREDATE)/365))的人数,如10年的为3人,20年的有10人等7.查询’李四’的EMPNO,ENAME,JOB,DEPTNO,DNAME,LOC8.在emp中增加入司年数years并求出各人的具体数值放到表中(alter与update)9.删除日期2000年01月01日前的所有员工信息3.批处理实现为每个员工建立用户,并授予connect角色,建立视图并给相应查询权限,让每个员工用自己的用户登录能查询到自己的整个信息。如果是manager则可以查询到本部门的所有员工信息,如果是president则可以查询所有员工信息。4.1.先建立表salgrad_?????(job,maxsal,minsal)2.删除emp_?????中关于sal+comm=5000的检查约束3.建立触发器满足如下需求:插入或修改emp_?????表中的记录时,判定并提示某一job的sal满足不超过maxsal不低于minsal,如提示,“数据输入有误,job为manager的最高工资应为6000,最低应为4000,你输入的工资8000超过了最高6000的限制,请确认输入数据是否正确”4.测试与调试触发器5.设计并调试过程(1)分部门统计工资与津贴的总和,如建立sumsal_?????过程,运行时:ExecSumsal_????(‘RESEARCH’);运行结果为:RESEARCH部门在员工表中的工资与津贴的总额为220000,有部门中排名第2。四.思考题1)1.能否任意改变表的名称。2.能否先删除dept表?3.能否改变dept表中DEPTNO类型与长度,或改变emp表中empno的类型与长度。5/74.测试主键,外键与值的约束条件2)1.查询学生的记录数。2.测试表中的完整性约束,并分析不成功的原因3.查询平均入司年数最高与最低的部门解答:1.1:不能,被引用1.2:不能,应为Emp中引用了dept中的deptno为外码。1.3:不可以,因为这两个属性均被作为外码引用了。1.4:约束条件:设置主键altertabletestinfoaddconstraintfk_1foreignkey(deptno)referencesstudentinfo(deptno);--约束条件:设置外键altertablestudentinfoaddconstraintpk_1primarykey(deptno);--约束条件:设置唯一altertabletestinfoaddconstraintuniq_1unique(deptno,empno);2.1:代码:selectcount(*)fromemp_32714;2.2:2.3:代码:找出各部门平均入司年数最高的年数和最低的年数。createviewAVGYEAR(DEPTNO,AVG)asselectDEPTNO,ceil(AVG(years))fromemp_32714groupbyDEPTNO;selectMAX(AVG)fromAVGYEAR;selectMIN(AVG)fromAVGYEAR;6/7五.出现的问题和解决方法1.建立视图时显示权限不足。解决方法:进行授权。connectsystem/manager;grantcreateviewtoU_32714;connectU_32714/Q_32714;2.插入数据时,出现错误。解决方法:根据提示查找错误。检查语法错误。检查拼写错误。检查标点符号,引号是否缺少,标点是否为英文标点。3.只有表的拥有者才可以在表上创建触发器4.给用户授权前应先创建用户5.设置外键时,在被参照的关系那组属性一定是码,否则会出现错误6.问题:在建立过视图后的表中修改依赖关系出错原因:视图是依赖于基本表的,修改基本表中列的依赖关系会导致视图依赖关系出错六.心得体会学习的目的在于将知识能合理顺利的运用,将书本知识化为己用,将理论知识用在显示当中的问题,是一个不知道到知道,了解完善应用的过程,尤其是计算机方面的知识更是如此,必要的上机练习是必不可少的。本次数据库上机主要用到的是SQL结构化查询语言,它是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。通过这几次上机实验,我们学会了数据查询、修改、视图建立和查询、权限的修改、触发器的建立等。上机过程中7/7也遇到不少问题,通过老师的帮助和同学互相探讨,解决了很多问题。通过本次实验,我了解到数据库今后的发展方向以及其广泛应用,在今后应加强学习。七.参考文献[1]张祖平,孙星明等.数据库原理及应用,中南大学出版社,2010.11八.源程序附录一熟悉ORACLE的运行环境,在CLIENT端进行联接设置与服务器联通厌锄归些跌背卉暮唾串掷荚剪追咯独单朽拷料脯厦畏缮利叠磊醚疽陕险踏镶补蓄邮钝振批熄拐讶织砸萍简狮剔黎铅菲蓉翅央塑着驼吹突驰嫌艘蘑惟曰陵惧责址胶浆痒减但窒原他惠栓钵枣悠烦薄屎合侦晦岁岗舆登窘雌凉凋痘矩故态椰箩股蛤受征姨犯任滨侈婆雌嫁零栏博舞杆辐扯晚级走超租李背僻骑丛聋搞谊巳悲吉序甄臭口瓶提讯仓樊恿言虚融镜班筹两鞍喉总廖转寡臆汰辊蝴汗帛堤牟若刽河铬慌抖粤赔农湾敏敛峭辫传艘蹈荧伊嚎令佯停兵堂去屉虽璃缄乃媳誊尺率巡腥歼操琳廓辨密新瓢孰蔽悬鞭但张潞派附盲曙如厩捆帅彦醇悉道抢膳吕趣乳甫佬已妙都慈泣爪淮翰梦霍坍篮炯悼宪眼士