Oracle复习资料答案.docx
《Oracle复习资料答案.docx》由会员分享,可在线阅读,更多相关《Oracle复习资料答案.docx(26页珍藏版)》请在冰豆网上搜索。
![Oracle复习资料答案.docx](https://file1.bdocx.com/fileroot1/2023-1/24/6aad5cac-b96d-406e-906c-b8ffe81a021e/6aad5cac-b96d-406e-906c-b8ffe81a021e1.gif)
Oracle复习资料答案
Oracle10g数据库管理应用与开发课后习题答案(填空与选择题)
填空题
第二章
1.Oracle数据库系统的物理存储结构主要由3类文件组成,分别为数据文件、日志文件、控制文件。
2.用户对数据库的操作如果产生日志信息、则该日志信息首先被存储在日志缓冲区中,随后由LGWR进程保存到日志文件。
3.一个表空间物理上对应一个或多个数据文件。
4.在Oracle的逻辑存储结构中,根据存储数据的类型,可以将段分为数据段、索引段、回退段、LOB段和临时段。
5.在Oracle的逻辑存储结构中,数据块是最小的I/O单元。
6.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务器进程。
当一个用户运行应用程序,如PRO*C程序或一个Oracle工具(如SQL*Plus),系统将为用户运行的应用程序建立一个用户进程。
第三章
1.标准的SQL语言语句类型可以分为:
数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。
2.在需要滤除查询结果中重复的行时,必须使用关键字Distinct;在需要返回查询结果中的所有行时,可以使用关键字ALL。
3.如果需要在SELECT子句中包括一个表的所有列,可使用符号*。
4.如果定义与组有关的搜索条件,可以把groupby子句添加到SELECT语句中。
5.当进行模糊查询时,就使用关键字LIKE和通配符"_"或百分号"%"。
6.WHERE子句可以接收FROM子句输出的数据,而HAVING子句则可以接收来自groupby、FROM或where子句的输入。
7.使下列SQL语句中添加适当的表达式或子句,使语句可以正常运行。
SELECT供应商所在城市,COUNT(供应商编号)
FROM供应商信息
GROUPBY供应商所在城市
ORDERBY2DESC;
第四章
1.在SQL语句中,用于向表中插入数据的语句是Insert。
2.如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用select语句。
3.创建一个UPDATE语句来修改ARTISTS表中的数据,并且把每一行的T_ID值都改成15,应该使用的SQL语句是updateartistssett_id=15;。
4.使用describe命令可以显示表的结构信息。
5.使用SQL*Plus的get命令可以将文件检索到缓冲区,并且不执行。
6.当设置了多个列的显示属性后,如果清除设置的显示属性,可以使用命令clearcolumn,而当要清除某列具体的显示属性时,需要使用命令OFF/column列名clear。
7.使用SAVE命令可以将缓冲区中的SQL命令保存到一个文件中,并且可以使用Start命令运行该文件。
8.要设置SQL*Plus显示数字时的格式可以使用NumFormat命令,而要设置某个数字列的显示格式要使用Column命令。
第五章
1.在Oracle系统中,为了实现对表、视图和索引等数据库对象进行管理,Oracle采用模式实现。
2.一个模式只能够被一个数据库用户所拥有,其创建的所有模式对象都保存在自己的模式中。
3.Char数据类型与Varchar2类型都用于存储字符串。
如果定义了Char类型的字段,并且向其赋值时,字符串的长度小于定义的长度,则使用空格填充;而Varchar2类型的字段用于存储变长的字符串,即如果向该列赋值的字符长度小于定义时的长度,该列的字符长度只会是实际字符数据的长度,系统不会使用空格填充。
4.ROWID实际上保存的是记录的物理地址,因此通过ROWID来访问记录右以获得最快的访问速度。
5.在STORAGE子句中可以设置6个存储参数。
其中,Initial指定为表中的数据分配的第一个盘区的大小;Next指定为存储表中的数据分配的第二个盘区大小;Pctincrease指定从第二个盘区之后,每个盘区相对于上一个盘区的增长百分比;Minextents指定允许为表中的数据所分配的最小盘区数目;Maxextents指定允许为表中的数据所分配的最大盘区数目。
6.通过数据块空间管理参数可以控制数据块中空闲空间的使用方法,其中Pctfree用于控制数据块的更新预留的空间,而Pctused用于控制数据块在删除时释放空间的门槛。
7.为Student表手动分配存储空间,并且大小由NEXT参数设置,则应使用的语句为AltertableStudentallocateextent;;如果为Student表手动分配了一个大小为128KB的新盘区,则应使用的语句为AltertableStudentallocateextent(size128k);。
8.填写下面语句,使其可以将Class表移动到表空间SYSTEM中的数据段,并且其初始化盘区为30KB,第二个盘区为20KB,随后分配的盘区不会增长。
ALTERTABLEClassmove
TABLESPACESYSTEM
STORAGE(
Initial30k
Next20k
Pctincrease0
MAXEXTENTSUNLIMITED);
9.根据约束的作用域,约束可以分为表级约束和列级约束两种。
列级约束是字段定义的一部分,只能够应用在一个列上;而表级约束的定义独立于列的定义,它可以应用于一个表中的多个列。
10.填写下面的语句,使其可以为Class表的ID列添加一个名为PK_CLASS_ID的主键约束。
ALTERTABLEClass
AddconstraintPK_CLASS_IDPRIMARYKEY(ID)
11.假设已经创建了CHAINED_ROWS表,填写下面的语句,以便对“业务员信息”表进行链接记录分析:
ANALYZETABLE业务员信息
Listchainedrowsintochained_rows
第六章
1.在使用逗号连接的多表查询中,为了防止出现笛卡儿积,需要SELECT语句的Where子句中提供连接条件。
2.使用逗号连接的多表查询中,用户可以根据下述基本原则创建需要的各种查询:
From子句应当包括所有的表名,在Where子句中应定义一个连接条件,当列名为多个表共有时,列名必须被限制。
3.自然连接为具有相同名称的列自动进行记录匹配,它不必指定任何同等连接条件。
4.集合运算符UNION实现了集合的并运算,操作INTERSECT实现了对集合的交运算,而MINUS则实现了减运算。
5.使用关键字连接子查询时,EXISTS关键只注重子查询是否返回行,如果子查询返回一个或多个行,那么便返回为真,否则为假。
第七章
1.PL/SQL程序块主要包含3个主要部分:
声明部分、可执行部分和异常处理部分。
2.使用显式游标主要有4个步骤:
声明游标、打开游标、检索数据、关闭游标。
3.在PL/SQL中,如果SELECT语句没有返回列,则会引发ORACLE错误,并引发no_data_found异常。
4.自定义异常必须使用raise语句引发。
5.查看操作在数据表中所影响的行数,可通过游标的%RowCount属性实现。
6.查看下面的程序块,DBMS_OUTPUT将显示什么结果?
N
DECLARE
var_aCHAR
(1):
='N';
BEGIN
DECLARE
var_aCHAR
(2);
BEGIN
var_a:
='Y';
END;
DBMS_OUTPUT.put_line(var_a);
END;
7.查看下面的程序块,其中变量var_b的结果为5。
DECLARE
Var_anumber:
=1200;
Var_bnumber;
BEGIN
IFvar_a>500THEN
var_b:
=5;
ELSIFvar_a>1000THEN
var_b:
=10;
ELSE
var_b:
=8;
ENDIF;
END;
8.下列程序计算由0~9之间的任意3个不相同的数字组成的三位数,共有多少种不同的组合方式?
完成下列程序使其能够正确运行。
DECLARE
counternumber:
=0;
BEGIN
FORiIN1..9LOOP
FORjIN0..9LOOP
IFi!
=jTHEN
FORkIN0..9LOOP
IFk!
=iandk!
=j
counter:
=counter+1;
ENDIF;
ENDLOOP;
ENDIF;
ENDLOOP;
ENDLOOP;
DBMS_OUTPUT.put_line(counter);
END;
第八章
1.在下面程序的空白处填写一定的代码,使该函数可以获取指定编号的商品价格。
CREATEORREPLACEFUNCTIONget_price
(P_IDvarchar2)
returnnumberis
IS
v_priceNUMBER;
BEGIN
SELECT单价
intov_price
FROM商品信息WHERE商品编号=P_ID;
RETURNv_price;
EXCEPTION
WHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('查找的商品不存在!
');
WHENTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE('程序运行错误!
请使用游标');
WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE('发生其他错误!
');
ENDget_price;
2.假设有一个程序包,其中包含了两个重载的函数max。
写出下面程序调用max函数后的运行结果。
程序包主体:
Createorreplacepackagebody
TESTis
Functionmax(xinnumber,yinnumber)returnnumberis
Resultnumber;
Begin
Ifx>ythen
Result:
=x;
Else
Result:
=y;
Endif;
Return(result)'
Endmax;
Functionmax(xinnumber,yinnumber,zinnumber)returnnumberisresultnumber;
Begin
Result:
=test.max(x,y);
Result:
=test.max(result,z);
Return(result);
Endmax;
End;
运行结果:
21
3.在下面程序的空白处填写适当的代码,使得调用该过程时可以统计某产地的商品数量和总价。
CREATEORREPLACEPROCEDUREproc_demo(
Merch_placeINvarchar2,
Price_sumoutNUMBER,
Merch_countoutNUMBER)
IS
BEGIN
SELECTSUM(单价),COUNT(*)INTOPrice_sum,Merch_count
FROM商品信息WHERE产地=Merch_place;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
DBMS_OUTPUT.PUT_LINE('所需数据不存在!
');
WHENOTHERSTHEN
DBMS_OUTPUT.PUT_LINE('发生其他错误!
');
ENDproc_demo;
第九章
1.为了建立外部表,首先需要指示数据文件在操作系统上的位置。
现在假设在操作系统的F:
\DATAFILE文件夹中存有一个数据文件,使用createdirectoryexterior_dataas'F:
\DATAFILE';语句使Oracle可以访问数据文件。
2.在使用CREATETABLE语句创建索引组织表时,必须使用organizationindex子句指示创建的表为索引组织表,并且为索引组织表指定主键。
3.PCTTHRESHOLD指定一个数据块的百分比,当一行中的数据占用空间大于这个百分比时,该行将被分隔到两个位置存储:
主键列被存储在基本索引段中,所有其他列被存储在溢出段中。
4.Oracle中的临时表可以分为事务级临时表和会话级临时表,创建事务级别的临时表,需要使用oncommitdeleterows子句;创建一个会话级别的临时表,则需要使用oncommitpreserverrows子句。
5.在创建对象类型时,用户不必特意创建构造函数,它由系统隐式创建,名称与对象类型的名称相同,并且它会接收对象类型的所有属性作为它的参数。
6.如果用户想要对对象类型的实例进行比较排序,则需要使用映射方法Map,它最重要的一个特点是:
当在WHERE或ORDERBY等比较关系子句中使用对象时会被间接地使用。
7.有两种方法向对象表添加数据:
一种是像关系表一样在INSERT的VALUES子句中,为对象的每个属性提供值,隐式地创建对象类型实例,向对象表添加数据;另一种方式是显式地创建对象实例,然后再将它添加到对象表。
8.Oracle数据库提供对表或索引的分区方法有5种:
范围分区、散列分区、列表分区、组合范围散列分区和组合范围列表分区。
9.簇是一种用于存储数据表中数据的方法。
簇实际是一组表,由一组共享相同数据块的多个表组成。
第十章
1.B树索引可以是唯一的或者不唯一的,唯一的B树索引可以保证索引列上不会有重复的值。
2.在为表中某个列定义PRIMARTKEY约束PK_ID后,则系统默认创建的索引名为PK_ID。
3.在B树索引中,通过在索引中保存排过序的索引列的值与相对应的RowID来实现快速查找。
4.如果表中某列的基数比较低,则应该在该列上创建位图索引。
5.如果要获知索引的使用情况,可以通过查询V$OBJECT_USAGE视图;而要获知索引的当前状态,可以查询Index_Stats视图。
第十一章
1.在不为视图指定列名的情况下,视图列的名称将使用表列的名称。
2.视图与数据库中的表非常相似,用户也可以在视图进行INSERT、UPDATE、和DELETE操作。
通过视图修改数据时,实际上是在修改基本表中的数据;相应地,改变基本表中的数据也会反映到该表产生的视图中。
3.视图是否可以更新,这取决于定义视图的SELECT语句,通常情况下,该语句越复杂,创建的视图可以更新的可能性也就越小。
4.下面的语句创建了一个序列对象,该序列对象的开始数为2,每次递增2,当大于1000后,序列值重新返回到2.在空白处填写适当的代码,完成上述要求。
Createsequenceseg_test
Startwith2
Incrementby2
Maxvalue1000
Cycle;
第十二章
1.假设有一个表TEST,它仅包含一个字段DATA。
现在创建一个触发器,实现将添加的数据变大写。
在下面的空白处填写适当的语句,使之可以正常运行。
Createorreplacetriggertest_trigger
AfterinsertonTESTforeachrow
Begin
:
new.data:
=upper(:
new.data);
End;
2.BEFORE和AFTER指定了触发器的触发时间。
当为一个表配置了约束时,它们将会特别有用,BEFORE可以规定Oracle在应用约束前调用触发器,而AFTER规定在应用约束后调用触发器。
3.假设有一个名为ACTION_TYPE的表,它记录了对STUDENT表的操作。
在空白处填写适当的代码,完成上述功能。
Createorreplacetriggerbiud_student_trigger
Beforeinsertorupdateordeleteonstudent
Declare
Actionaction_type.type%type;
Begin
ifinsertingthenaction:
='INSERT';
elsifupdatingthenaction:
='UPDATE';
elsifdeletingthenaction:
='DELETE';
endif;
insertintoaction_typevalue(user,action);
End;
第十三章
1.事务的ACID特性包括原子性、一致性,隔离性和永久性。
2.在设置事务隔离层时,需要使用关键字settransaction。
3.可以用SETCONSTRAINTconstraint_nameDEFERRED语句,启用某个约束的延期应用,而使用SETCONSTRAINTALLDEFERRED语句可以设置本事务中所有约束的延期应用;语句SETCONSTRAINTALLIMMEDIATE可以设置约束的应用。
4.在众多的事务控制语句中,用来撤销事务的操作的语句为ROLLBACK,用于持久化事务对数据库操作的语句是COMMIT。
5.当Oracle检测到死锁后,它会选择一个事务退出。
选择退出事务的原则是执行修改数目最小的事务。
6.锁粒度与数据库系统的并发度和并发控制的开销密切相关。
锁粒度越大,数据库中所能够使用的资源也就越少,并发度也就越小,系统开销也就越小。
7.当对某个表加SRX锁时,则表中行的锁类型为DML锁。
第十四章
1.如果要获取数据库中创建的配置文件的信息,可以通过查询数据字典视图DBA_profiles。
2.在Oracle数据库中将权限分为两类,即系统权限和对象权限。
系统权限是指在系统级控制数据库的存取和使用机制,对象权限是指在模式对象上控制存取和使用的机制。
3.角色是具有名称的一组相关权限的组合。
4.连接到数据库的最低系统预定义角色是connect。
5.在用户连接到数据库后,可以查询数据字典role_sys_privs了解用户所具有的系统权限。
第十五章
1.表空间的管理类型可以分为数据字典管理和本地化管理。
2.在Oracle的早期版本中,对撤销信息的管理采用手动管理撤销,从Oracle9i后采用自动撤销管理方式管理撤销信息。
3.一个表空间具有离线(OFFLINE)、在线(ONLINE)、只读(READONLY)、读写(READWRITE)状态。
4.在创建UNDO表空间时,所使用的表空间管理方式为本地化管理,并且盘区的管理方式只允许使用AutoAllOcate方式。
5.在创建本地化管理临时表空间时,不得指定盘区的管理方式为AutoAllOcate,临时表空间的盘区管理统一使用uniform方式。
选择题
第二章
1.下列选项中,哪一部分不是Oracle实例的组成部分?
C
A.系统全局区SGAB.PMON后台进程C.控制文件D.Dnnn调度进程
2.在全局存储区SGA中,哪部分内存区域是循环使用的?
B
A.数据缓冲区B.日志缓冲区C.共享池D.大池
3.解析后的SQL语句在SGA的哪个区域中进行缓存?
C
A.数据缓冲区B.日志缓冲区C.共享池D.大池
4.如果一个服务进程非正常终止,Oracle系统将使用下列哪一个进程来释放它所占用的资源?
D
A.DBWRB.LGWRC.SMOND.PMON
5.如果服务器进程无法在数据缓冲区中找到空闲缓存块,以添加从数据文件中读取的数据块,则将启动如下哪一个进程?
D
A.CKPTB.SMONC.LGWRD.DBWR
6.下列关于共享服务器模式的叙述哪一项不正确?
A
A.在共享服务器操作模式下,每一个用户进程必须对应一个服务器进程
B.一个数据库实例可以启动多个调度进程
C.在共享服务器操作模式下,Oracle实例将启动调度进程Dnnn为用户进程分配服务进程
D.共享服务器操作模式可以实现少量服务器进程为大量用户进程提供服务
7.当数据库运行在归档模式下时,如果发生日志切换,为了保证不覆盖旧的日志信息,系统将启动如下哪一个进程?
D
A.DBWRB.LGWRC.SMOND.ARCH
8.下列哪一个进程和数据库部件可以保证用户对数据库所做的修改在没有保存的情况下,不会发生丢失修改数据?
C
A.DBWR和数据文件B.LGWR和日志文件组C.CKPT和控制文件D.ARCH和归档日志文件
9.下列哪一个进程用于将修改过的数据从内存保存到磁盘数据文件中?
A
A.DBWRB.LGWRC.RECOD.ARCH
10.如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图?
A
A.DBA视图B.ALL视图C.USER视图D.动态性能视图
11.下列哪一项是Oracle数据库中最小的存储分配单元?
D
A.表空间B.段C.盘区D.数据块
12.下面的各项中哪一个正确描述了Oracle数据库的逻辑存储结构?
A
A.表空间由段组成,段由盘区组成,盘区由数据块组成
B.段由表空间组成,表空间由盘区组成,盘区由数据块组成
C.盘区由数据块组成,数据块由段组成,段由表空间组成
D.数据块由段组成,段由盘区组成,盘区由表空间组成
第三章
1.下列的哪个子句在SELECT语句中用于排序结果集?
D
A.HAVING子句B.WHERE子句C.FROM子句D.ORDERBY子句
2.为了去除结果集中重复的行,可在SELECT语句中使用下列哪个关键字?
B
A.ALLB.DISTINCTC.SPOOLD.HAVING
3.下列哪个关键字或子句用来限定查询结果集中的行?
B
A.SELECTB.WHEREC.UPDATED.INSERT
4.GROUPBY子句的作用是什么?
A
A.查询结果的分组条件B.组的筛选条件C.限定返回的行的判断条件D.对结果集进行排序
5.HAVING子句的作用是B
A.查询结果的分组条件B.组的筛选条件C.限定返回的行的判断条件D.对结果集进行排序
6.下列哪个函数可以把一个列中的所有值相加求和?
B
A.MAXB.SUMC.COUNTD.AVG
7.下列哪个子句是SELECT语句中必选项?
A
A.FROMB.WHEREC.HAVINGD.ORDERBY
8.当使用三角函数COS求余弦时,应以B为单位传递参数。
A.角度B.弧度C.角度和弧度均可D.上述都不对
9.下列哪个子句实现对一个结果集进行分组和汇总?
D
A.HAVINGB.ORDERBYC.WHERED.GROUPBY
10.查询一个表的总记录数,可以采用C统计函数。
A.AVG(*)B.SUM(*)C.COUNT(*)D.MAX(*)
第四章
1.要建立一个语句向Types表中插入数据,这个表只有两列,T_ID和T_Name列。
如果要插入一行数据,这一行的T_ID值是100,T_Name值是FRUIT。
应该使用的SQL语句是A。
A.INSERTINTOTypesValues(100,'FRUIT')
B.SELECT*FROMTypesWHERET_ID=10