数据库开发技术实验报告认识Oracle常用管理工具和DDLDML实践.docx
- 文档编号:15278069
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:17
- 大小:125.35KB
数据库开发技术实验报告认识Oracle常用管理工具和DDLDML实践.docx
《数据库开发技术实验报告认识Oracle常用管理工具和DDLDML实践.docx》由会员分享,可在线阅读,更多相关《数据库开发技术实验报告认识Oracle常用管理工具和DDLDML实践.docx(17页珍藏版)》请在冰点文库上搜索。
数据库开发技术实验报告认识Oracle常用管理工具和DDLDML实践
福建工程学院信息科学与工程学院
实验报告
2013–2014学年第1学期任课老师:
蒋建辉
课程名称
数据库开发技术
班级
座号
姓名
实验题目
认识Oracle常用管理工具和DDL、DML实践
实验时间
实验开始日期:
2013.10.12
报告提交日期:
2013.10.16
实验目的、要求
实验目的:
1.认识并熟悉Oracle常用的管理工具:
SQLPlus、iSQLPlus、SQLDevelopter和EM。
2.掌握Oracle表的数据定义(DDL)语言,实现表的定义、删除与修改。
3.掌握创建Oracle表各种约束的方式和方法。
4.掌握利用数据字典视图查看各种有用信息的方法。
5.掌握插入、删除和更新表中数据的方法。
6.掌握控制事务的方法。
7.掌握WHERE子句中条件表达式的使用方法。
8.掌握访问替换变量的方法。
9.学会创建并执行一个脚本文件。
10.掌握CASE结构的使用方法。
实验设计内容及实现步骤
实验内容和要求
1.*登录到SQLPlus、iSQLPlus、SQLDevelopter和EM,认识并运用这些常用的Oracle管理工具。
2.DDL实践
(1)Oracle表的DDL实践。
设有如下关系表S_班名座号(如:
s_wg100103):
s_wg100103(SNO,SNAME,SSEX,SAGE,SDEPT),主关键字是SNO。
其中SNO为学号,NUMBER(5),学号不能为空,值是惟一的;SNAME为姓名,VARCHAR2(20);SSEX为性别,char
(2);SAGE为年龄,NUMBER
(2);SDEPT为所在系名,VARCHAR2(10)。
写出实现下列功能的SQL语句。
1)创建此表并插入数据;
createtables_ji3110307207
(
snonumber(5)primarykeynotnull,
snamevarchar2(20),
ssexchar
(2),
sagenumber
(2),
sdeptvarchar2(10)
)
INSERTINTOSVALUES(95001,'李明勇','男',20,'CS');
INSERTINTOSVALUES(95002,'刘晨','女',19,'IS');
INSERTINTOSVALUES(95003,'王名','女',18,'MA');
INSERTINTOSVALUES(95004,'张立','男',19,'CS');
INSERTINTOSVALUES(95005,'张军','男',21,'MA');
INSERTINTOSVALUES(95006,'王张凤','女',19,'FL');
INSERTINTOSVALUES(95011,'王敬','女',18,'IS');
INSERTINTOSVALUES(95021,'张名惠','男',19,'FL');
2)查看此表的数据结构和数据;
3)根据此表再复制创建一个只有’IS’系学生组成的新表S_IS_班名座号;
createtables_is_ji3110307207
asselect*froms_ji3110307207
wheresdept='is'
4)向S表添加“入学时间(comedate)”列,其数据类型为日期型(date);
altertables_ji3110307207addcomedatedate
5)将年龄的数据类型改为NUMBER(3)且默认值为19,并查看这些修改后的表结构;
列无数据的情况下直接修改:
altertables_ji3110307207modifysagemunber(3),default(19)
列有数据的情况下:
新建一列
altertables_ji3110307207addnewsagenumber(3)default(19)
旧列数据复制新列中
updates_ji3110307207setnewsage=cast(sageasnumber(3));
删除旧列
altertables_ji3110307207dropcolumnsage;
重新命名新列
altertables_ji3110307207renamecolumnnewsagetosage;
6)删除新添加的列,查看更改情况;
altertables_ji3110307207dropcolumncomedate
7)将表s改名为student;
altertables_ji3110307207renametostudent_3110307207
8)为表s添加注释'学生信息表'
commentontablestudent_3110307207is'学生信息表'
读取注释:
select*fromuser_tab_commentswherecommentsisnotnull
9)截断s表;
truncatetables_ji3110307207
10)删除生成的新表S_IS_班名座号;
truncate和delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),
索引(index);依赖于该表的存储过程
droptables_is_ji3110307207
(2)创建约束
要求按普遍采用的约定为这些约束命名,约束创建后要进行约束测试。
(参见所附的表结构和数据,表名要加上班名座号)
CREATETABLECOURSE_ji3110307207
(
CNONUMBER(4),
CNAMEVARCHAR2(30),
CPNONUMBER(4),
CCREDITNUMBER
(2),
CLIMITNUMBER(4)
)
1)为COURSE表添加一个主键约束;
altertablecourse_ji3110307207addconstraintpk_cnoprimarykey(cno)
查看此表的约束:
Select*fromuser_constraintswheretable_name='COURSE_JI3110307207'
2)创建SC表的主键约束和外键约束(一个列级和一个表级),表级的外键约束要求允许使用级联删除选项;
altertablecourse_ji3110307207addconstraintpk_cnoprimarykey(cno)
select*fromuser_constraintswheretable_name='SC'
altertablescaddconstraintsno_cno_fkforeignkey(sno,cno)referencess_ji3110307207(sno)andcourse_ji3110307207(cno)
ORA-02256:
要引用的列数必须与已引用列数匹配?
3)为S表的SSEX创建CHECK约束;
altertables_ji3110307207addconstraintssex_chkcheck(ssexin('男','女'))
Select*fromuser_constraintswheretable_name='S_JI3110307207'
4)为S表创建一个合适的Notnull和unique惟一性约束;
姓名为非空:
select*fromUSER_CONSTRAINTSwheretable_name='S_JI3110307207'
学号是唯一的:
altertables_ji3110307207addconstraintsno_uniqueunique(sno)
建表时已经将sno设为主键了,然后就添加不进去了;ORA-02261:
表中已存在这样的唯一关键字或主键;然后查约束条件的时候又没有看到?
5)在上题基础上,删除其中一个约束,启用/禁用其中一个约束,并测试之。
Altertables_ji3110307207dropconstraintssex_chk
altertables_ji3110307207disableconstraintsys_c005176
altertables_ji3110307207enableconstraintsys_c005176
(3)使用数据字典视图
利用任意3种数据字典视图查看数据库对象的信息,如查看表、表空间信息和约束信息等。
查看用户下所有的表:
select*fromuser_tables
显示用户信息所属的表空间:
selectdefault_tablespace,temporary_tablespacefromdba_users
查询约束信息:
Select*fromuser_constraints
3.DML实践
(1)Oracle表的DML操作。
1)7369号雇员加薪10%。
updateemp
setsal=sal*1.1
whereempno=7369
2)*从部门表(DEPT)中删除部门30,如果删除不成功,那么写出你自己的建议,说明应该怎么做。
应该把30号部门的员工信息删除,因为部门表的部门编号作为了员工表的外键
3)向EMP表中插入一个新雇员。
Insertintoempvalues(7950,'QSL','MANAGER',7839,to_date('21-08-2003','DD-MM-YYYY'),4000.00,NULL,10)
(2)数据检索。
1)*显示EMP表中月薪>$2850的雇员的姓名和薪资。
selectename,salfromemp
wheresal>2850
2)*显示雇员号为7566的员工的姓名和部门号。
selectename,deptnofromemp
whereempno=7566
3)显示受雇日期在’20-2月-1981’与’1-5月-1981’之间的员工的姓名、工种和受雇日期,要求以受雇日期升序排列。
selectename,job,hiredatefromemp
wherehiredatebetween'20-2月-1981'and'1-5月-1981'
orderbyhiredate
4)*显示部门号为10、30的员工的姓名和部门号,要求以姓名序排列。
selectename,deptnofromemp
wheredeptnoin(10,30)
orderbyename
5)显示EMP表中所有岗位(job)的类型。
selectdistinctjobfromemp
6)显示没有上司员工的姓名和工种。
selectename,jobfromemp
wheremgrisnull
7)显示部门号为10、30且月薪>$1500的所有员工的姓名和月薪,要求显示列名为“Employee”和“MonthlySalary”。
selectenameEmployee,salMonthlySalaryfromemp
wheredeptnoin(10,30)and
sal>1500
8)显示哪些姓名中含有字母”A”并且部门号为30的员工或者上司号为7782的员工姓名。
selectenamefromemp
whereenamelike'%A%'anddeptno=30ormgr=7782
9)*在查询EMP表中使用连接操作符和原义字符串。
查询结果类同以下:
selectename||'isa'||job
fromemp
雇员和职务表
-------------------------
SMITHisaCLERK
ALLENisaSALESMAN
WARDisaSALESMAN
JONESisaMANAGER
MARTINisaSALESMAN
......
10)*显示哪些挣了佣金(comm)的员工的姓名、月薪和佣金,要求显示结果按月薪降序,月薪相同再按佣金降序。
降序:
selectsalfromemporderbysaldesc
升序:
selectsalfromemporderbysal
selectename,sal,commfromemp
wherecommisnotnull
orderbysaldesc,commdesc
(3)事务控制、替代变量、CASE结构
1)*请为用户创建一个定制提示符,提示用户为Deptno列输入50~99之间的一个值
2)*学习使用COMMIT、ROLLBACK和SAVEPOINT等事务控制语句。
3)*学会创建并执行一个脚本文件。
4)*观察数据的读一致性。
(提示:
用两个不同的连接来观察,另一个连接比如可以用scott的身份连接)
5)显示符合任意条件的雇员的编号以及其它任意的列
6)将CASE结构用于UPDATE语句。
基于雇员的job值来更新job值。
’MANAGER’更新为'管理人员','PRESIDENT'更新为'总经理',其余的更新为'普通人员'。
updateemp
setjob=case
whenjob='MANAGER'then'管理人员'
whenjob='PRESIDENT'then'总经理'
else'普通人员'
end
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITH普通人员790217-12月-8080020
7499ALLEN普通人员769820-2月-81160030030
7521WARD普通人员769822-2月-81125050030
7566JONES管理人员783902-4月-81297520
7654MARTIN普通人员769828-9月-811250140030
7698BLAKE管理人员783901-5月-81285030
7782CLARK管理人员783909-6月-81245010
7788SCOTT普通人员756613-7月-87300020
7839KING总经理17-11月-81500010
……
已选择14行。
一、*附加题
查询EMP表中10号部门的员工平均工资,如果参加平均的员工工资低于2000就以2000作为最低可能的工资参加平均。
指出你使用的CASE结构是简单CASE表达式(SimpleCASEExpression)还是搜索式CASE表达式(SearchedCaseExpression)。
二、实验报告
根据以上实验内容的要求认真填写实验报告,记录所有的实现方法和运行结果,并记录实验过程中遇到的困难和解决问题的方法。
(实验报告中不要求写加*题目的实验过程和内容)
三、附录:
CREATETABLECOURSE(
CNONUMBER(4)
CNAMEVARCHAR2(30),
CPNONUMBER(4),
CCREDITNUMBER
(2),
CLIMITNUMBER(4));
CREATETABLESC(
SNONUMBER(5),
CNONUMBER(4),
GRADENUMBER(3,1));
INSERTINTOCOURSEVALUES(1,'数据库',5,5,10);
INSERTINTOCOURSEVALUES(2,'数学',NULL,3.10);
INSERTINTOCOURSEVALUES(3,'信息系统',1,4,12);
INSERTINTOCOURSEVALUES(4,'操作系统',6,4,12);
INSERTINTOCOURSEVALUES(5,'数据结构',7,5,16);
INSERTINTOCOURSEVALUES(6,'数据处理',NULL,3,15);
INSERTINTOCOURSEVALUES(7,'PASCAL语言',6,2,NULL);
COMMIT;
INSERTINTOSCVALUES(95001,5,92);
INSERTINTOSCVALUES(95002,3,80);
INSERTINTOSCVALUES(95001,1,58);
INSERTINTOSCVALUES(95002,2,90);
INSERTINTOSCVALUES(95003,3,NULL);
INSERTINTOSCVALUES(95001,3,70);
INSERTINTOSCVALUES(95002,1,84.5);
INSERTINTOSCVALUES(95009,2,67);
INSERTINTOSCVALUES(95010,2,NULL);
INSERTINTOSCVALUES(95009,1,34.5);
INSERTINTOSCVALUES(95001,2,85);
COMMIT;
调试过程记录
4)为S表创建一个合适的Notnull和unique惟一性约束;
姓名为非空:
select*fromUSER_CONSTRAINTSwheretable_name='S_JI3110307207'
学号是唯一的:
altertables_ji3110307207addconstraintsno_uniqueunique(sno)
建表时已经将sno设为主键了,然后就添加不进去了;ORA-02261:
表中已存在这样的唯一关键字或主键;然后查约束条件的时候又没有看到?
总结以及心得体会
第一次完成oracle实验,说实话,量还是很多的,幸好老师给了比较多的时间去完成,总体来说难度还算中等,就是有些语法不是很了解,所以要尝试比较多次才能出来结果,但是通过这次的实验,oracle基本的一些操作算是差不多了解并大致掌握了。
实验中也遇到了许多困难,而后通过了看书,还有上网XX查资料获得了解决。
另外也记录了自己比较不清楚的知识点在实验报告中,以便以后的复习。
指导老师评阅意见
指导老师:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 开发 技术 实验 报告 认识 Oracle 常用 管理工具 DDLDML 实践