最新oracle教程第二版》部分习题参考答案资料.docx
《最新oracle教程第二版》部分习题参考答案资料.docx》由会员分享,可在线阅读,更多相关《最新oracle教程第二版》部分习题参考答案资料.docx(19页珍藏版)》请在冰豆网上搜索。
最新oracle教程第二版》部分习题参考答案资料
文字性习题答案参见相应章节内容
第1章
习题1
DACC
第2章
习题1
执行edit命令打开文本编辑器;
使用column命令设置列显示宽度
习题2
CONNscott/tiger@orcl
SELECT*FROMtab;--本题严谨一些的答案是查询ALL_OBJECTS视图,带条件查询
习题3
@d:
\init_data\init_data.sql
习题4
SETPAGESIZE24
SETLINESIZE100
COLUMNsalFORMAT$99,990.00
第3章
习题1
DB
习题2
CONNstu01/stu01pwd@orcl
COLUMNUSERNAMEFORMATA10
SELECTusername,granted_roleFROMuser_role_privs;
习题5
CREATESESSION系统权限
习题11
CONNscott/tiger@orcl
COLUMNGRANTEEFORMATA10
SELECTgrantee,table_name,grantor,privilege,grantable
FROMuser_tab_privs_made;
习题12
CONNsystem/systempwd@orcl
COLUMNGRANTEEFORMATA22
SELECTgrantee,privilege,admin_optionFROMdba_sys_privs
ORDERBYgrantee,privilege;
SELECTgrantee,granted_roleFROMdba_role_privs;
使用REVOKE命令回收不必要的系统权限和角色。
\
第4章
习题8
CONN/@cemerpASSYSDBA
ALTERUSERscottQUOTA10MONUSERS;
习题9
CONNsystem/systempwd@orcl
CREATETABLESPACEdata_ts1
DATAFILE'%ORACLE_BASE%\oradata\orcl\data_ts1.dbf'SIZE10000MREUSE;
CREATETEMPORARYTABLESPACEtemp_ts1
TEMPFILE'%ORACLE_BASE%\oradata\orcl\temp_ts1.dbf'SIZE200MREUSE;
CREATEUSERsurtecIDENTIFIEDBYsurtecpwd
DEFAULTTABLESPACEdata_ts1TEMPORARYTABLESPACEtemp_ts1;
GRANTCREATESESSIONTOsurtec;
GRANTRESOURCETOsurtec;
CONNsurtec/surtecpwd@orcl
--创建该用户的表emp……
--授权给SIB
GRANTSELECTONempTOsib;
GRANTUPDATE(flag)ONendowment_insuranceTOsib;
习题10
CONNsystem/systempwd@orcl
CREATEUSERtest01IDENTIFIEDBYtest1234;
GRANTCREATESESSIONTOtest01;
GRANTCREATETABLESPACETOtest01;
CONNtest01/test1234@orcl
CREATETABLESPACEtest_ts
DATAFILE'%ORACLE_BASE%\oradata\orcl\test_ts.dbf'SIZE100K
AUTOEXTENDONNEXT50KMAXSIZE5MUNIFORMSIZE50K;
ALTERTABLESPACEtest_ts
ADDDATAFILE'%ORACLE_BASE%\oradata\orcl\test_ts2.dbf'SIZE10M;
ALTERDATABASE
DATAFILE'%ORACLE_BASE%\oradata\orcl\test_ts2.dbf'RESIZE15M;
习题11
CONNsystem/systempwd@orcl
ALTERTABLESPACEpur_ts
ADDDATAFILE'%ORACLE_BASE%\oradata\orcl\pur_data.dbf'SIZE800M;
ALTERDATABASE
DATAFILE'%ORACLE_BASE%\oradata\orcl\pur_data.dbf'RESIZE2000M;
ALTERDATABASEDATAFILE'%ORACLE_BASE%\oradata\orcl\pur_data.dbf'
AUTOEXTENDONNEXT30M;
第5章
习题1
BA
习题8
(1)撤销表空间中不允许建立永久方案对象;将方案对象建立在数据表空间即可。
(2)在脱机表空间上不允许执行创建方案对象操作;将该表空间联机即可。
(3)使用ALTERUSER修改用户在USERS表空间上的限额即可。
(4)使用ALTERUSER修改用户,扩大在USERS表空间上的限额即可。
习题9
CONNhr/hrpwd@orcl
CREATETABLEemployees2AS
SELECTemployee_idid,first_name,last_name,salary,
department_iddept_id
FROMemployees;
习题10
CONNscott/tiger@orcl
ALTERTABLEemp
ADD(dept_idNUMBER(7));
ALTERTABLEemp
ADDCONSTRAINTemp_dept_id_fk
FOREIGNKEY(dept_id)REFERENCESdept(deptno);
习题11
假定数据库用户为hr
(1)
CONNhr/hrpwd@orcl
CREATETABLEg_emp(
EMPNONUMBER(4)NOTNULL,
ENAMEVARCHAR2(10),
JOBVARCHAR2(10),
MGRNUMBER(4),
HIREDATEDATE,
SALNUMBER(7,2),
COMMNUMBER(7,2),
DEPTNONUMBER(3))
PARTITIONBYRANGE(sal)
(PARTITIONSAL_1000VALUESLESSTHAN(1000)tablespaceusers,
PARTITIONSAL_2000VALUESLESSTHAN(2000)tablespaceusers,
PARTITIONSAL_3000VALUESLESSTHAN(3000)tablespaceusers,
PARTITIONSAL_4000VALUESLESSTHAN(4000)tablespaceusers,
PARTITIONSAL_5000VALUESLESSTHAN(5000)tablespaceusers,
PARTITIONSAL_maxVALUESLESSTHAN(MAXVALUE)tablespaceusers);
(2)
DESCg_emp
(3)
--创建表空间
CONNsystem/systempwd@orcl
CREATETABLESPACEhiredate_ts
DATAFILE'%ORACLE_BASE%\oradata\orcl\hiredate_ts1.dbf'SIZE1MREUSE;
--创建表
CONNhr/hrpwd@orcl
CREATEINDEXemp_hiredate_index
ONg_emp(HIREDATEDESC)
TABLESPACEhiredate_ts;
(4)
ALTERTABLEg_empDROP(COMM);
ALTERTABLEg_empADD(bonusNUMBER(7,2));
第6章
略
第7章
习题1
(1)
CONNscott/tiger@orcl
CREATESEQUENCEid_seq
INCREMENTBY1
STARTWITH1
MAXVALUE99999
NOCACHE
NOCYCLE;
(2)可以修改序列的定义;或者修改产品表主键的定义。
习题2
参见例7.1。
习题4
使用数据字典DBA_DB_LINKS
习题5
在总部建立指向各分店的数据库链接,然后在分店服务器建立实体化视图日志,在总店建立各分店个表的实体化视图。
第8章
习题1
ADBCB
习题4
(1)
SELECTworker.enameename,manager.enamemanager
FROMempworker,empmanager
WHEREworker.mgr=manager.empno;
(2)
SELECTworker.ename,worker.empno,worker.deptno,manager.ename
FROMempworker,empmanager
WHEREworker.mgr=manager.empnoANDworker.hiredate(3)
SELECTe.ename
FROMempe,deptd
WHEREe.deptno=d.deptnoANDupper(d.dname)='IT';
(4)
SELECTename,empno,deptno,job,sal
FROMemp
WHEREsal>
(SELECTavg(sal)
FROMemp);
(5)
SELECTd.deptno,count(e.ename),avg(e.sal),
avg(months_between(sysdate,e.hiredate))
FROMempe,deptd
WHEREe.deptno(+)=d.deptno
GROUPBYd.deptno;
(6)
SELECTd.deptno,d.dname,d.loc,e.num
FROM(SELECTdeptno,count(ename)num
FROMemp
GROUPBYdeptno)e,deptd
WHEREe.deptno(+)=d.deptno;
(7)
SELECTjob,min(sal+nvl(comm,0))FROMempGROUPBYjob;
(8)
SELECTename,deptno,minsal
FROMemp,(SELECTmin(sal)minsalFROMemp
WHEREjob=upper('manager'))b
WHEREemp.job=upper('manager')ANDemp.sal=b.minsal;
或者用内嵌视图,执行Top-N查询
(9)
SELECTename,sal*12Annual_sal
FROMemp
ORDERBYAnnual_salASC;
习题5
SELECTlast_name,ROUND(MONTHS_BETWEEN(SYSDATE,hire_date))
MONTHS_WORKED
FROMemployees
ORDERBYMONTHS_BETWEEN(SYSDATE,hire_date);
习题6
SELECTe.last_name,e.hire_date
FROMemployeese,employeesdavies
WHEREdavies.last_name='Davies'
ANDdavies.hire_date习题8
SELECTlast_name,department_id,TO_CHAR(null)
FROMemployees
UNION
SELECTTO_CHAR(null),department_id,department_name
FROMdepartments;
习题9
创建表的语句如下
CREATETABLET_PRTSTRUDEF(
PRTNOVarchar2(24),--物料号
PRTPNOvarchar2(24),--父件号
PRTPQTYnumber(20,7),--需求数量
PRTDESCVarchar2(30),--物料名称
PRTTYPEVarchar2
(1),--物料类型
PRTPRCNumber(18,3),--单价,下一字段是计量单位
PRTUMVarchar2(8));
--插入示例数据,P-表示产品D-表示部件M-表示零件(仅为了举例)
INSERTINTOT_PRTSTRUDEFVALUES('WD01','',0,'床','P',850,'张');
INSERTINTOT_PRTSTRUDEFVALUES('WD0101','WD01',1,'床头','D',100,'套');
INSERTINTOT_PRTSTRUDEFVALUES('WD0102','WD01',2,'床头柜','D',80,'个');
INSERTINTOT_PRTSTRUDEF
VALUES('WD010201','WD0102',1,'柜门','D',15,'扇');
INSERTINTOT_PRTSTRUDEF
VALUES('WD010202','WD0102',1,'床头柜身','D',65,'个');
INSERTINTOT_PRTSTRUDEF
VALUES('WD01020101','WD010201',1,'柜门板','M',13,'张');
INSERTINTOT_PRTSTRUDEF
VALUES('WD01020102','WD010201',1,'拉手','M',2,'个');
COMMIT;
--查询整个产品
SELECTLEVEL部件层次,SUBSTRB(LPAD('',2*(LEVEL-1))||PRTDESC,1,30)
产品结构,PRTPQTY需求数量,PRTPRC单价
FROMT_PRTSTRUDEF
STARTWITHPRTPNOISNULL
CONNECTBYPRIORPRTNO=PRTPNO;
执行结果如下:
部件层次产品结构需求数量单价
---------------------------------------------------
1床0850
2床头1100
2床头柜280
3柜门115
4柜门板113
4拉手12
3床头柜身165
--查询柜门的子件
SELECTLEVEL部件层次,SUBSTRB(LPAD('',2*(LEVEL-1))||PRTDESC,1,30)
产品结构,PRTPQTY需求数量,PRTPRC单价
FROMT_PRTSTRUDEF
STARTWITHPRTNO='WD010201'
CONNECTBYPRIORPRTNO=PRTPNO;
执行结果如下:
部件层次产品结构需求数量单价
--------------------------------------------------
1柜门115
2柜门板113
2拉手12
--查询柜门的父件(反查)
SELECTLEVEL部件层次,SUBSTRB(LPAD('',2*(LEVEL-1))||PRTDESC,1,30)
产品结构,PRTPQTY需求数量,PRTPRC单价
FROMT_PRTSTRUDEF
STARTWITHPRTNO='WD010201'
CONNECTBYPRIORPRTPNO=PRTNO;
执行结果如下:
部件层次产品结构需求数量单价
--------------------------------------------------
1柜门115
2床头柜280
3床0850
第9章
习题1
AC
习题2
CONNscott/tiger@orcl
SETserveroutputON
CREATEORREPLACEPROCEDUREcheck_sal
IS
CURSORemp_cursorISSELECTempno,ename,deptno,sal,jobFROMemp;
BEGIN
FORemp_recINemp_cursorLOOP
IFemp_rec.job='CLERK'ANDemp_rec.salNOTBETWEEN1500AND2500THEN
DBMS_OUTPUT.PUT_LINE(emp_rec.deptno||':
'||emp_rec.empno||':
'||emp_rec.ename||':
'||emp_rec.sal);
ELSIFemp_rec.job='SALESMAN'ANDemp_rec.salNOTBETWEEN800AND5000THEN
DBMS_OUTPUT.PUT_LINE(emp_rec.deptno||':
'||emp_rec.empno||':
'||emp_rec.ename||':
'||emp_rec.sal);
ELSIFemp_rec.job='MANAGER'ANDemp_rec.salNOTBETWEEN3000AND4500THEN
DBMS_OUTPUT.PUT_LINE(emp_rec.deptno||':
'||emp_rec.empno||':
'||emp_rec.ename||':
'||emp_rec.sal);
ELSIFemp_rec.job='ANALYST'ANDemp_rec.salNOTBETWEEN2500AND3500THEN
DBMS_OUTPUT.PUT_LINE(emp_rec.deptno||':
'||emp_rec.empno||':
'||emp_rec.ename||':
'||emp_rec.sal);
ENDIF;
ENDLOOP;
END;
/
EXECUTEcheck_sal
习题3
SETECHOOFF
SETVERIFYOFF
DEFINElow_date=01/01/1998
DEFINEhigh_date=01/01/1999
SELECTlast_name||','||job_id雇员职位,hire_date
FROMemployees
WHEREhire_dateBETWEENTO_DATE('&low_date','MM/DD/YYYY')
ANDTO_DATE('&high_date','MM/DD/YYYY')
/
UNDEFINElow_date
UNDEFINEhigh_date
SETVERIFYON
SETECHOON
习题4
--创建表
CREATETABLEmessages(
resultsVARCHAR2(100));
--本题答案
DECLARE
v_enameemployees.last_name%TYPE;
v_salemployees.salary%TYPE:
=&p_sal;
BEGIN
SELECTlast_name
INTOv_ename
FROMemployees
WHEREsalary=v_sal;
INSERTINTOmessages(results)
VALUES(v_ename||'-'||v_sal);
EXCEPTION
WHENno_data_foundTHEN
INSERTINTOmessages(results)
VALUES('Noemployeewithasalaryof'||TO_CHAR(v_sal));
WHENtoo_many_rowsTHEN
INSERTINTOmessages(results)
VALUES('Morethanoneemployeewithasalaryof'||
TO_CHAR(v_sal));
WHENothersTHEN
INSERTINTOmessages(results)
VALUES('Someothererroroccurred.');
END;
/
习题5
--创建相关表
CREATETABLEcall_fee_account(
telnoVARCHAR2(20),
pay_dateDATE,
chargeNUMBER(7,2),
late_feeNUMBER(7,2));
--创建函数
CREATEORREPLACEFUNCTIONfee(p_dateDATE)RETURNNUMBERIS
v_feeNUMBER;
BEGIN
SELECTSUM(charge+NVL(late_fee,0))
INTOv_fee
FROMcall_fee_account
WHEREpay_date=p_date;
RETURNv_fee;
END;
/
习题6
可参考例9.20,该例子是删除(delete),本题中为修改(update)。
习题7
--创建存储过程
CREATEorREPLACEPROCEDUREshow_dept_empIS
CURSORcur_deptisselectdeptno,dnamefromdeptorderbydeptno;
CURSORcur_emp(p_nonumber)isselectename,nvl(sal,0),nvl(comm,0)fromempwheredeptno=p_no;
v_deptnonumber(3