1、第 1 页 共 8 页北京交通职业技术学院期末考试试题答案20132014 学年第二学期12 计算机专业 课程名称:1Oracle 数据库(A)卷 出题教师:孙继亮 一、选择题(每题 1 分,共 10 题,共 10 分)1、B2、B3、B4、D5、B6、ACD7、C8、C9、D10、A二、填空题(每空 2 分,共 10 空,共 20 分)1 Connect martin/martinpassaptech2 Grant select on scott.emp to martin3 Select * from employee where 1=24 To_char5 NVL6 even_numbe
2、r7 1.258 SELECT ename INTO empname FROM employee WHERE empno=eno;9 EXCEPTION10 OPEN toy_cur第 2 页 共 8 页三、简答(每题 10 分,共 4 题,共 40 分)1、绑定变量是什么?绑定变量有什么优缺点?绑定变量是指在 SQL 语句中使用变量,改变变量的值来改变 SQL 语句的执行结果。优点:使用绑定变量,可以减少 SQL 语句的解析,能减少数据库引擎消耗在 SQL 语句解析上的资源。提高了编程效率和可靠性。减少访问数据库的次数, 就能实际上减少ORACLE 的工作量。缺点:经常需要使用动态 SQL
3、的写法,由于参数的不同,可能 SQL 的执行效率不同;绑定变量是相对文本变量来讲的,所谓文本变量是指在 SQL 直接书写查询条件,这样的 SQL 在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询 bind value 在运行时传递,然后绑定执行。 优点是减少硬解析,降低 CPU 的争用,节省 shared_pool 缺点是不能使用 histogram,sql 优化比较困难2、简单描述 tablespace / segment / extent / block 之间的关系tablespace: 一个数据库划分为一个或多个逻辑单位,该逻辑单位成为表空间;每一个表空间可能包含一
4、个或多个 Segment;Segments: Segment 指在 tablespace 中为特定逻辑存储结构分配的空间。每一个段是由一个或多个 extent 组成。包括数据段、索引段、回滚段和临时段。Extents: 一个 extent 由一系列连续的 Oracle blocks 组成.ORACLE 为通过 extent 来给 segment 分配空间。Data Blocks:Oracle 数据库最小的 I/O 存储单位,一个 data block 对应一个或多个分配给 data file 的操作系统块。table 创建时,默认创建了一个 data segment,每个 data segme
5、nt 含有 min extents 指定的 extents 数,每个 extent 据据表空间的存储参数分配一定数量的 blocks3、日志的作用是什么?第 3 页 共 8 页日志文件(Log File)记录所有对数据库数据的修改,主要是保护数据库以防止故障,以及恢复数据时使用。其特点如下:a)每一个数据库至少包含两个日志文件组。每个日志文件组至少包含两个日志文件成员。b)日志文件组以循环方式进行写操作。c)每一个日志文件成员对应一个物理文件。记录数据库事务,最大限度地保证数据的一致性与安全性 重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做
6、日志文件 归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。4、Oracle 系统进程主要有哪些,作用是什么?数据写进程(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件日志写进程(LGWR):将重做日志缓冲区中的更改写入在线重做日志文件系统监控 (SMON): 检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复进程监控 (PMON): 负责在一个 Oracle 进程失败时清理资源检查点进程(CKPT):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。归档进程 (ARCH):在每次日志切
7、换时把已满的日志组进行备份或归档恢复进程 (RECO): 保证分布式事务的一致性,在分布式事务中,要么同时 commit,要么同时 rollback;作业调度器(CJQ ): 负责将调度与执行系统中已定义好的 job,完成一些预定义的工作.四、程序题(每题 10 分,共 3 题,共 30 分)第 4 页 共 8 页1、查找出当前用户模式下,每张表的记录数,以 scott 用户为例,结果应如下:DEPT.4EMP.14BONUS.0SALGRADE.5其实现的代码是: declaretype tab_names is table of varchar2(20) index by binary_i
8、nteger;tab_name tab_names;coun number;str varchar2(100);beginselect table_name bulk collect into tab_name from user_tables;for i in tab_name.first.tab_name.last loopstr:=select count(*) from |tab_name(i);execute immediate str into coun;dbms_output.put_line(tab_name(i)|.|coun);end loop;end;2、某 cc 表数据
9、如下:c1 c2-第 5 页 共 8 页1 西1 安1 的2 天2 气3 好转换为1 西安的2 天气3 好要求:不能改变表结构及数据内容,仅在最后通过 SELECT 显示出这个查询结果代码为:create or replace function x return varchar2istype t_array is table of number index by binary_integer;type tarray is table of varchar2(10) index by binary_integer;ta t_array;tar tarray;re varchar2(10);n n
10、umber;na varchar2(10);beginselect id bulk collect into ta from (select id,name from xx order by id) group by id;第 6 页 共 8 页for i in ta.first.ta.last loopdbms_output.put(ta(i)| );select name bulk collect into tar from xx where id=ta(i);for i in tar.first.tar.last loopdbms_output.put(tar(i);end loop;d
11、bms_output.put_line( );end loop;return re;end;3、表 nba 记录了 nba(team VARCHAR2(10),y NUMBER(4)夺冠球队的名称及年份:TEAM Y- -活塞 1990公牛 1991公牛 1992公牛 1993火箭 1994火箭 1995公牛 1996公牛 1997公牛 1998马刺 1999湖人 2000湖人 2001湖人 2002第 7 页 共 8 页马刺 2003活塞 2004马刺 2005热火 2006马刺 2007凯尔特人 2008湖人 2009湖人 2010请写出一条 SQL 语句,查询出在此期间连续获得冠军的有哪
12、些,其连续的年份的起止时间是多少,结果如下:TEAM B E- - -公牛 1991 1993火箭 1994 1995公牛 1996 1998湖人 2000 2002湖人 2009 2010select max(nn.team) team,min(nn.y) B,max(nn.y)+1 E from (select n2.team,n2.y from (select * from nba) n1 join(select * from nba) n2on n1.team=n2.teamwhere n1.y=n2.y+1) nngroup by (nn.y-rownum)order by B第 8 页 共 8 页