Oracle数据库基础 贾素林 王强 清华大学出版社 课后习题答案

发布时间:2011-06-08 17:30:46   来源:文档文库   
字号:

由于网上找不到此资料,所以只好自己打出来了。仓促间,错误在所难免,请高手修改后,把修改版的资料传到网上共享。命名为“oracle数据库基础(清华大学出版社贾素玲王强主编)课后答案修改版”+8位的日期。

第一章

1,简述ORACLE软件体系结构?

答:ORACLE软件体系结构主要由数据库文件,内存结构和进程构成,全面支持C/SB/S软件体系下应用程序的开发。

2Oracle模式对象分为哪些类型?

模式对象包括表,视图,索引,序列,同义词,触发器,过程,函数和包等结构。

3P28小结第三第四段

4,查询表emp中员工号为7499的员工姓名和工作职位

答:select ename,job

from emp

where empno=7499;

/

5,用PL;/SQL语句在屏幕中输出“Hello!”

答:begin

dbms_output.put_line('Hello!');

end;

/

第二章

1,根据下面数据表设计信息,创建表

答:create table nsrxx

(jsjdm varchar2(8)not null,

nsrmc varchar2(30)not null,

dz varchar2(40)not null,

dh varchar2(8)not null,

fddbr varchar2(15)not null

);

2设计emp表中,奖金为null的员工人数

答:select count(*)

from emp

where comm is null;

3,(1)查询名字中第三个是A的员工姓名。

2)查询名字中倒数第三个是A的员工姓名。

4

5执行顺序是where,group by,having,order by

第三章

1,p58第六段

2,根据下面数据表设计信息,创建表。要求删除表yhzyuzdm时,可以自动删除表yh中所属yhzdm的相关信息。

create table yhz

(

yhzdm varchar2(2)not null,

yhzmc varchar2(10) not null

constraint yhz_primary

primary keyyhzdm,

);

create table yh

(

yhdm varchar2(10) not null,

yhmc varchar2(10) not null,

yhmm varchar2(10) not null,

yhzdm varchar2(2) not null,

constraint yh_primary

primary keyyhzdm,

constraint yh_foreign

foreign key(yhzdm)

references yhz(yhzdm) on delete cascade

);

desc yhz;

desc yh;

insert into yhz values('&yhzdm','&yhzmc');

insert into yh values('&yhdm','&yhmc','&yhmm','&yhzdm');

select * from yhz;

select * from yh;

3,查询工资高于平均工资水平的员工姓名和工资。

答:select ename,sal

from emp

where sal>(select avg(sal) from emp);

4(1)有两个列约束,当插入的新数据中电话号码或者邮件地址相同时会产生冲突。

2)有一个表约束,当插入的新数据中电话号码和邮件地址同时相同时会产生冲突。

5,笛卡尔积查找的几个关系中的列可以不同,

并操作查找的几个关系中的列需要相同。

第四章

1,参考P85.

2,在第三章习题二的基础上,创建视图,该视图可以根据yhdm查询yuzmc

答:create view yhz_yh

as

select a.yhzdm, a.yhmc, b.yhdm, b.yhmm, b.yhmm, b.yhzdm

from yhz a,yh b

where a.yhzdm=b.yhzdm;

select * from yhz_yh;

select yhzmc from yhz_yh where yhdm='&yhdm';

3,某系统需要文书序列号管理,创建序列。文书号从1开始,最大文书号位10000,可循环使用。

答:假设该系统book表已经建立

alter table book add (no number);

create sequence book_seq

increment by 1

start with 1

maxvalue 10 000

cycle;

select c_emp.nextval from dual;

select c_emp.currval from dual;

4,可以,用P98 grant命令

5,静态数据字典:这类数据字典主要是由表和视图组成

数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。

静态数据字典中的视图分为三类,它们分别由三个前缀成:user_* all_* dba_*

1.

该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

1.

该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)

1.

该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限

第五章

1,编写程序,程序的功能是输入员工号,如果该员工工龄在25年以上,工资提高10%

答:

declare

v_empno emp.empno%type:=&v_empno;

v_sal emp.sal%type;

v_hiredate emp.hiredate%type;

begin

select hiredate

into v_hiredate

from emp

where empno=v_empno;

if ((sysdate-v_hiredate)/365)>25 then

update emp

set sal=sal*1.10

where empno=v_empno;

dbms_output.put_line('sal ok!');

else

update emp

set sal=sal

where empno=v_empno;

dbms_output.put_line('others ok!');

end if;

end;

/

2,编写程序,程序的功能是输入员工号,输出该员工经理的姓名。

答:

declare

v_empno emp.empno%type:=&v_empno;

e1_ename emp.ename%type;

begin

create table emp1 as select * from emp;

select e1.ename

from emp e,emp1 e1:

where empno=v_empno and e.mgr=e1.empno;

dbms_output.put_line(e1_ename);

end;

/

3,静态SQL和动态SQL的区别是什么?

静态SQL是指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是明确对象。

动态SQL是指在PL/SQL块中使用的SQL语句在编译时是不明确的,要根据用户输入的参数的不同而执行不同的操作。

4,集合包含哪些类型?

集合包含索引表,嵌套表,可变数组。

5,输出:54321

第六章

1,P1296—1

2,用显示游标编写程序,程序的功能是计算每一个部门的平均工资。

答:

declare

cursor c_dept is select * from dept order by deptno;

cursor c_emp(p_dept emp.deptno % type) is select ename,sal from emp where deptno=p_dept

order by ename;

r_dept dept % rowtype;

v_ename emp.ename % type;

v_salary emp.sal % type;

v_avg_salary emp.sal % type;

begin

open c_dept;

loop

fetch c_dept into r_dept;

exit when c_empt % notfound;

dbms_output.put_line(‘department:’||r.dept.deptno||’-’|| r_dept.dname);

v_avg_salary:=0;

open c_emp(r_dept.deptno) ;

loop

fetch c_emp into v_ename,v_salary;

exit whern c_emp % notfound;

dbms_output.put_line(‘name:’|| v_ename || ’salary:’ ||v_salary);

v_avg_salary:=v_avg_salary + v_salary;

end loop

close c_emp;

dbms_output.put_line(‘average salary for dept: ’|| v_avg_salary);

end loop;

close c_dept;

end;

/

3,用cursor for 编写上面的程序。

答:

declare

cursor c_dept is select deptno,dname from dept order by deptno;

cursor c_emp(p_dept emp.deptno % type) is

select ename,sal

from emp

where deptno=p_dept

order by ename;

v_avg_salary emp.sal % type;

begin

for r_dept in c_dept loop

dbms_output.put_line(‘department:’|| r.dept.deptno|| ’-’ || r_dept.dname);

v_avg_salary:=0;

for r_emp in c_emp(r_dept.deptno) loop

dbms_output.put_line(‘name:’|| r_emp.ename || ’salary:’ || r_emp.sal);

v_avg_salary:=v_avg_salary + r_emp.sal;

end loop;

dbms_output.put_line(‘average salary for dept: ’|| v_avg_salary);

end loop;

end;

/

4,程序中触发异常的条件

1)当输入的员工号小于7000或者大于8000

2)没有找到记录;

3)在提取时,返回行数超过一行。

5,抛出异常的三种方式

1)预定义异常,在PL/SQL运行时抛出;

2)自定义异常,用户使用RAISE语句抛出;

3ORACLE还为异常定义了错误代码和错误信息,因此用户还可以通过调用raise_appplication_error抛出异常。

第七章

1P152参考mode的三种形式 in out in out

2,参考

create or replace package P_emp as

version varchar2(11):=version 1.0;

author varchar2(15):=buaa sem 108 xk;

procedure A(v_deptno emp.deptno%type);

function B(v_empno emp.empno%type)return B_integer;

end P_emp;

3,EMP中部门为20的员工有N个,则系统输出N次“trigger executed!

4,触发器没有执行,数值没有改变。

5,处罚期的工作原理:触发器与一个表或者数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发,可以设置为在触发器事件之前或之后触发执行,能够触发事件包括三种:DDL事件,DML事件和数据库事件。

第八章

1,P175保持应用程序的完整性,采取回滚的机制。

2,p179

3P1818—3

4,定义参数文件

文件名:export.dat

文件内容:

userid=scott@sem108

buffer=4096

file=f:/20100627.dmp

tables=nsrxx

执行文件

exp parfile=f:/export.dat

5,参考P197

第九章

数据库的设计工作主要包括一下三个环节:

1,模式对象设计:包括表设计,视图设计,索引设计,序列设计和同义词设计。

2,功能设计:包设计,触发器设计和异常处理设计。

3,安全设计:角色设计和备份计划设计。

本文来源:https://www.2haoxitong.net/k/doc/800f618ad0d233d4b14e699b.html

《Oracle数据库基础 贾素林 王强 清华大学出版社 课后习题答案.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式