9、oracle数据库系统中,启动数据库的第一步是启动一个数据库实例。(Y)。 10、SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享的。(N)
11、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的条件中也可以有聚集函数。(N)
解释:WHERE 后面的条件不可以有聚集函数
12、oracle dba角色具有所有的权限。(N)
13、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是全外连接 。(Y) 14、oracle数据库中实例和数据库是一一对应的(非ORACLE并行服务,非集群)。( Y ) 15、pl sql代码块声明区可有可无。( Y )
16、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信息。(N) 解释:user_*(当前用户所拥有对象的有关信息), all_*(当前用户可访问对象的信息), dba_*(数据库中所有对象的信息)。
17、因为存储过程不返回值,使用时只能单独调用;而函数却能出现在能放置表达式的任何位置。( Y )
18、上海西北京 可以通过like ?%上海_?查出来。(N) 19、锁用于提供数据的完整性和一致性。( Y )
20、oracle数据库的热备份,数据库必须处于归档模式下。(Y)
四、填空题(每题1分,共20分)
1、Oracle数据库安装后默认的用户有(sys)、(system)等。 2、Oracle的数据备份命令是( exp ),数据恢复命令是(imp )。 3、修改表空间时,使用命令格式的关键字是 (alter) ,更新表记录的关键字是 (update)。 4、客户端连接服务器需要修改(tnsnames.ora),(listener.ora)文件。 5、数据库系统的其结构一般分为三级:用户级、(概念级)、(物理级) 。
6、创建一个简单的用户testUser, 密码为test的语句是(create user testUser identified by test)。
7、提交一个事务使用关键字(commit) 。 8、获得两个集合的交集使用(intersect) 。
9、创建用户时,需要赋予新用户(connect)权限才能使它联上数据库。 10、在oracle体系结构中,包括三类进程,包括用户进程,(服务器进程),(后台进程)。 11、当进行模糊查询是,应使用关键字(like) 和通配符(下划线_)或百分号“%”。 12、使用显示游标主要有四个步骤,声明游标,(打开游标),(读取数据),关闭游标。
五、简答题(每题2分,共12分)
1、删除一张表重复记录(id 是自增唯一,重复记录:其他字段都是一样),有重复的记录只保留一条 Table aa id name age
第 6 页 共 27 页
1 louis 20 2 louis 20 3 jimmy 30 4 louis 20
------------------------------------------------------------------
答:delete from aa where id not in(select min(id) from aa group by name,age);
2、解释FUNCTION,PROCEDURE和PACKAGE差别。 答:function和procedure是PL/SQL代码的集合,通常为了实现一个任务。procedure不须要返回任何值,而function将返回一个值。Package是为了实现一个商业功用的一组function和procedure的集合。
3、Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理? 答:方法一:NVL(column_name,0)
方法二:DECODE(column_name,null,0, column_name)
4、在oracle环境下,需要创建表空间,当数据超过表空间大小时,要对表空间进行扩充,请说出三种扩展方式。 答:添加数据文件 改变数据文件的大小 允许数据文件自动扩展
5、用命令行的方式,创建一个新的ORACLE用户,用户名为AAA,口令为BBB,默认表空间为USERS,临时表空间为 TEMP。 答:
CREATE USER AAA IDENTIFIED BY BBB DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
6、如果一个表在2010-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复?
手工拷贝回所有备份的数据文件 startup mount;
sql alter database recover automatic until time '2010-08-04:10:30:00'; alter database open resetlogs;
六、编程题(每题4分,共8分)
1、请用一个 sql 语得出结果从 table1,table2 中取出如 table3 所列格式数据 (4分) table1
月份 mon 部门 dep 业绩 yj ------------------------------- 一月份 01 10 一月份 02 10 一月份 03 5 二月份 02 8 二月份 04 9
第 7 页 共 27 页
三月份 03 8
table2
部门 dep 部门名称 dname -------------------------------- 01 国内业务一部 02 国内业务二部 03 国内业务三部 04 国际业务部 05 其他部门
table3 (result)
部门 dep 部门名称 一月份 二月份 三月份 -------------------------------------- 01 国内业务一部 10 0 0 02 国内业务二部 10 8 0 03 国内业务三部 0 5 8 04 国际业务部 0 0 9 05 其他部门
select a.dep,a.dname
sum(case when b.mon='一月份' then b.yj else 0 end) as '一月份', sum(case when b.mon='二月份' then b.yj else 0 end) as '二月份', sum(case when b.mon='三月份' then b.yj else 0 end) as '三月份',
from table2 a left join table1 b on a.dep=b.dep
2、一个订单表order1,有这些字段(orderid int ,ordername varchar2(10),qty number,ordernum number,status varchar2(10)) 写一段pl/sql,使用游标,查询订单表,如果qty(预购数量)等于ordernum(实际订购量),则将status设置为?已处理?,否则设置为?未处理? (4分)
declare
cursor order_cur is select * from order1 for update of status;
my_order_qty order1%rowtype; begin
open order_cur; Loop
fetch order_cur into my_order_qty; exit when order_cur%notfound;
if my_order_qty.ordernum!=my_order_qty.qty then update order1 set status='未处理'
第 8 页 共 27 页
where current of order_cur ; else
update order1 set status='已处理' where current of order_cur; end if ; end loop;
close order_cur; end;
--循环游标 declare
cursor c_rec is select * from order1 for update; begin
open c_rec;
for e in c_rec loop
if e.qty=e.ordernum then
update order1 set status='已处理' where current of c_rec; else
update order1 set status='未处理' where current of c_rec; end if; end loop; close c_rec; end;
选择题 1
数据库由哪几种文件组成? ACD 参数文件 口令文件 数据文件 控制文件 重做日志
进程恢复是由哪个后台进程来完成的? C DBWR LGWR SMON PMON
数据字典信息被存放在哪种文件中? C 数据文件 控制文件
第 9 页 共 27 页
重做日志
当执行SQL语句时,数据字典信息是从SGA的哪部分获得? C 共享池
数据高速缓存 重做日志缓冲区
SGA包括以下哪些部分? AD 数据高速缓存 PGA 共享池
重做日志缓冲区
DEFINE命令可以用于定义哪种变量? B NUMBER CHAR
VARCHAR2 DATE
使用ACCEPT命令所定义的变量可以使用以下哪些标号引用? AB & && :
假定SALES部门有10个雇员,其中有9个雇员的工资为1000,另一个雇员的工资为NULL,那么当使用AVG函数取得该部门的平均工资时,结果应该是多少? B 1000 900 950
以下哪条语句是正确的? C
SELECT deptno,sum(sal) FROIM emp;
SELECT deptno,avg(sal) FROM emp WHERE avg(sal)>2000 GROUP BY deptno; SELECT deptno,avg(sal) FROM emp GROUP BY deptno HAVING avg(sal)>2000;
如果要显示所有部门及其雇员信息,应该使用哪个语句? B
SELECT a.dname,b.ename FROM dept a,emp b WHERE a.deptno=b.deptno;
SELECT a.dname,b.ename FROM dept a,emp b WHERE a.deptno=b.deptno(+); SELECT a.dname,b.ename FROM dept a,emp b WHERE a.deptno(+)=b.deptno;
以下哪个集合操作符不会执行排序操作? B UNION
UNION ALL INTERSECT MINUS
第 10 页 共 27 页