前言: 在阅读《从零开始学 Oracle 》的时候,发现课后习题可以帮助自己回忆这一章节的内容。但是,没能找到题目的答案,于是自己总结了一份,记录于此。这里没有SQL实战,但是如果能完整地回答这些课后习题,基本就理解了Oracle的理论基础。
一、填空题
二、选择题
字段必须具有单一属性特性,属于数据库范式的第几种?
A. 第一范式
B. 第二范式
C. 第三范式
D. 第四范式
【A】1NF表明,数据库字段必须具有单一属性特性,不可再拆分。
Oracle数据库中最小的数据管理单位是:
A. 段
B. 区
C. 数据块
D. 字节
【C】段用来存储具有独立存储结构的对象的所有数据,段由一个或多个区组成。区是存储分配的最小单位。数据库是最小的数据管理单位,是执行输入、输出操作的最小单位。
三、问答题
简单介绍数据库范式的作用。
降低数据冗余,使得数据库的设计具有最佳效率和性能。
简单介绍数据库管理系统的功能。
定义数据库结构
存取数据库内容
数据库的运行管理
数据库的传输
一、填空题
二、选择题
客户端的服务命令保存在哪个配置文件中?
A. listener.ora
B. tnsnames.ora
C. oracle.ora
D. init.ora
【B】服务器端的网络配置在listener.ora中,客户端的配置保存在tnsnames.ora中。
使用DBCA不能完成下列哪项工作?
A. 创建数据库
B. 删除数据库
C. 管理数据库
D. 创建数据表
【D】Database Configuration Assistant主要用于数据库操作。
三、问答题
简述数据库的启动步骤
启动数据库到NOMOUNT状态
启动数据库到MOUNT状态
启动数据库到OPEN状态
SQL*Plus 可以执行哪些命令?
SQL语句:用于对数据库进行操作,以 ; 号作为结尾符。
PL/SQL程序代码:PL/SQL是Oracle的过程性程序代码,用来执行过程性代码操作数据库中的信息,以 / 号作为结尾。
SQL *Plus命令:编辑、保存和运行SQL脚本或PL/SQL程序块,格式化和程序输出以及自定义PL/SQL的环境。
一、填空题
二、选择题
SQL语句不能完成的功能是:
A. 数据定义
B. 数据操作
C. 查询数据
D. 循环语句
【D】SQL语句不能完成循环操作
在SQL Plus中显示表结构需要使用哪个指令:
A. CONN
B. DESC
C. GET
D. SET
【B】CONN用于连接数据库,DESC用于查看表结构,GET命令用于执行外部文件,SET用于设置运行环境
三、问答题
简述SQL语言的使用方式。
(1)通过SQL *Plus或者Oracle SQL Developer等工具进行交互式个数据库操作,这种方式称之为交互式SQL应用。
(2)在使用C#、Java以及C语言开发应用软件是,通过将SQL嵌入到应用程序中,这种方式称为嵌入式SQL应用。
简述SQL语言的编写规范。
PL/SQL保留字使用大写字母:如BEGIN、DECLARE、LOOP
内置函数使用大写字母:如SUBSTR、COUNT、TO_CHAR
预定义类型使用大写字母:如NUMBER、VARCHAR2、BOOLEAN
SQL关键字使用大写字母:如SELECT、INTO、UPDATE
数据库对象使用小写字母:如数据库表名、列名、视图名
一、填空题
二、问答题
简介全局临时表的作用
与标准表相比,临时表不永久保存数据,数据在会话结束或者事务提交后,自动清空临时表中数据。临时表一般用来处理临时的数据保存工作,在编写一段复杂的SQL语句时,可能需要提取一些数据缓存到一个表中,此时临时表就可以派上用场了。
简介Dual表的作用。
Dual是Oracle数据库提供的一个虚拟表,这个表存在的目的是用来构成SELECT语句的语法规则。当需要使用SELECT语句的一些功能时,比如使用SELECT获取当前用户,调用系统函数、执行计算公式等,可以使用到Dual表。
一、填空题
二、选择题
约束共可以分为5类,下面拿一类不属于Oracle约束?
A. 非空约束
B. 检查约束
C. 唯一性约束
D. 表名约束
【D】Oracle提供的约束有:非空约束,唯一性约束,主键约束,检查约束,外键约束
如果要指定一个列的值不能重复,应该使用下面的哪个关键字创建约束?
A. NOT NULL
B. UNIQUE
C. CHECK
D. PRIMARY KEY
【B】NOT NULL表示不能为空约束;UNIQUE表示唯一性约束;CHECK表示检查约束;PRIMARY KEY表示主键约束
三、问答题
介绍索引的创建策略。
小表不需要创建索引
大表的索引创建在经常查询且结果数小于总记录数的15%的字段
大部分值不重复的列创建索引
基数大的列创建B树索引,基数小的列创建位图索引
列中有许多空值,但经常查询所有的非空值记录的列,创建索引
LONG和LONG RAW列不能创建索引
经常进行连接查询的列上创建索引
在使用CREATE INDEX语句创建查询时,将最常见的查询的列放在其他列的前面
维护索引需要开销,特别在对表进行插入和删除操作时。对于读操作多的表,索引多有好处,如果表经常更改,索引应该少点
在表中插入数据后创建索引
介绍约束的创建时机。
约束是为了完成数据库数据的一致性和完整性的一种检查机制。通过在数据库表中定义约束条件,能够增强数据的完整性,比如限制某个字段不能为空,限制某个列不能出现重复值以及主外键约束等。
一、填空题、
二、选择题
下面关于视图的描述错误的是:
A. 视图的更改不会影响到基础表
B. 视图的更改会影响到基础表
C. 视图的修改会影响到引用了视图的对象的状态
D. 对视图的基表修改后,会导致视图失效
【B】视图的更改不会影响到基础表
内联视图可以完成的操作不包括下列的哪一项?
A. INSERT
B. DELETE
C. SELECT
D. DROP
【D】内联视图可以使用INSERT、UPDATE和DELETE对数据进行新增、修改和删除。DROP操作作用于标准视图和物化视图。
三、问答题
简述视图的作用。
视图是基于表或视图的逻辑表,与存储数据的表一样都是Oracle的方案对象,通过创建视图,可以对存储的数据进行逻辑的组合,就好像是一个展现数据的窗口,通过该窗口可以查看或改变表中的数据。
简述内联视图的使用时机。
内联视图又称为临时视图,这种视图并不存储到方案对象中,而是作为嵌套在SQL语句中的子查询而存在,临时视图经常用来处理复杂的数据查询。一般称SQL语句中的FROM子句中的子查询为临时视图。
一、填空题
二、选择题
当使用CREATE SYNONYM语句创建同义词时,默认创建的是:
A. 公有同义词
B. 私有同义词
C. 序列
D. 伪列
【B】默认创建的是私有同义词,公有同义词需要加PUBLIC
如果要使序列在达到MAX VALUE值后再重新开始,则需要在创建序列时指定哪个关键字?
A. INCREMENT BY
B. CYCLE
C. NOCYCLE
D. CACHE
【B】INCREMENT BY用于定义序列的步进值;CYCLE代表序列达到最大值后循环生成;NOCYCLE代表序列达到最大值后不循环;CACHE定义存放序列的内存块大小
三、问答题
比较Oracle序列与SLQ Server自增字段的不同之处。
数据序列与数据库表进行分离,使得序列具有了全局特性,这在进行SQL编程或者是PL/SQL程序设计是有时候非常有用。序列不再像自增字段那样无法控制,也就是说在编程时可以提前获知当前的序列号,避免了在程序设计时要往返查询的麻烦。
请介绍一下同义词的使用时机。
同义词的出现为Oracle解决了很多命名的问题。例如在书中介绍Oracle使用方案对数据库进行管理时,如果用户scott用户要访问hr方案下的employees表,必须要使用hr.employees这样的名称,否则系统在当前方案下找不到相应的对象时就会提示“表或视图找不到”的错误。很多时候,这样的名称会导致后期的维护出现大的问题,而通过Oracle的同义词,可以为hr方案下的部分对象编写同义词,这样其他用户就可以通过同义词来访问employees对象,而不用通过hr.employees,既方便了用户,又使得以后的维护变得更轻松。
一、填空题
二、选择题
现有 emp 和 dept 表,通过 deptno 进行主外键关联,如果要查询 emp 表中所有的内容,下面的连接语法哪种是正确的?
A. emp.deptno(+)=dept.deptno
B. emp.deptno(+)=dept.deptno(+)
C. emp.deptno=dept.deptno(+)
D. emp.deptno=dept.deptno
【C】emp表是左表,当 + 出现在右边,表示返回左表的所有数据。
如果有一个测试环境要产生大量的随机数据,可以选择哪种连接来轻松完成?
A. 左连接
B. 右连接
C. 交叉连接
D. 自然连接
【C】交叉连接是将A表中的记录行数与B表中的记录行数相乘得到的结果,交叉查询可以很方便地产生大量数据。
三、问答题
请简单介绍一下分组查询的作用。
分组查询又称为同级查询,通常用来对数据进行汇总计算,比如想知道每个部门中所有员工的最高工资,想了解每个部门的人员分布情况或者是每种类型的职位的平均薪资,这些需求可以使用SQL的分组查询来实现。
使用左连接的情况。
当需要获取连接的左边的表的所有数据时使用左连接。
一、填空题
二、选择题
下面的对DML语句的描述中错误的是:
A. 所有的DML语句通常只能操作一个表,INSERT和MERGE可以操作多个表
B. 如果表中的字段有NOT NULL约束,在INSERT操作时需要为列指定列值
C. 在执行了DML语句后,必须显示地使用COMMIT和ROLLBACK语句进行回滚
D. Oracle会在每一条DML语句后显示地进行事务的提交
【D】Oracle的事务只有使用COMMIT语句显示地提交,才会将用户所做的更改保存到数据库
如果要清空一个表中的数据,并且不进行任何日志记录,需要使用如下哪个语句?
A. MERGE
B. UPDATE
C. DELETE
D. TRUNCATE
【D】TRUNCATE语句一次性删除所有的表数据,没有WHERE条件,不会产生回退日志。
三、问答题
在使用DELETE语句删除记录时,必须要注意的事项有哪些?
DELETE语句只会删除整条记录,而不能对记录的某个字段进行删除
删除一个表可能导致与其他表的引用完整性出现问题,因此必须要注意删除的顺序
DELETE语句只是删除表中的数据,并不会对整个表进行移除工作,移除表使用DROP TABLE语句
DELETE语句在删除数据时会产生回退日志信息,因此可以使用事务进行回滚恢复。
简述DELETE与TRUNCATE的区别。
TRUNCATE语句一次性删除所有的表数据,它没有WHERE条件,也不会产生回退日志,因此删除速度要比DELETE语句快,但是TRUNCATE删除的数据不能恢复,因此使用该语句时应该慎重。
一、填空题
二、选择题
下面哪个函数不属于转换函数?
A. TO_CHAR
B. TO_DATE
C. TRUNC
D. CONVERT
【C】TRUNC属于数字型函数,一般用户截取特定的小数位
下面哪个函数的作用类似于CASE语句?
A. UNLLIF
B. COALESCE
C. DECODE
D. NVL
【C】DECODE根据特定的条件,实现IF-THEN-ELSE条件判断的返回值,类似于CASE语句
三、问答题
简述NAL和NAL2的区别。
NVL和NVL2函数都用来检测一个表达式是否为NULL,如果一个表达式为NULL,可以返回一个非NULL的替代值。NVL函数和NVL2函数功能类似,但是NVL2比NVL的功能更加灵活。
简述COALESCE函数的作用。
COALESCE是相对于NVL和NVL2来说最灵活的一个函数,这个函数接受一个参数值列表,COALESCE将返回列表中的第一个非NULL的值。
一、填空题
二、选择题
请判断下面的哪一个不是块的基本组成结构语句?
A. DECLARE
B. DEGIN
C. EXCEPTION
D. EXECUTE IMMEDIATE
【D】块的BEGIN和END是必须的,此外还有DECLARE和EXCEPTION.
在PL/SQL中包含多种循环控制结构,如果知道循环的次数要使用哪种类型的循环?
A. LOOP
B. WHILE
C. FOR
D. IF
【C】LOOP、WHILE、IF都是判断条件成立时执行循环。
三、问答题
PL/SQL的性能优势在哪里?
PL/SQL块可以将多条SQL语句作为一个语句块进行发送,降低了网络往返所需的开销,提升了整个应用程序的执行性能,对于命名的PL/SQL块来说,比如存储过程、触发器或者是包,这些PL/SQL块会以编译的形式存储在服务器上,并且Oracle会利用已经执行过的缓冲来优化执行的性能,因此比起单独执行SQL语句来说,性能有大幅度的提升。
为什么说PL/SQL可以模块化应用程序开发?
结构化程序讲究以模块功能和处理过程作为设计的基本原则,当编写的业务逻辑越来越复杂时,如果在一个语句块中动辄写了成千上万行代码,虽然在编写时酣畅淋漓,但是后期维护往往痛苦不堪。PL/SQL通过提供存储过程、存储函数和包3个程序单元,可以将程序的功能按其结构划分,将复杂的问题进行层层分解,自顶向下的进行程序设计,使得程序更具有模块化,大大提升程序的稳定性和可读性。
一、填空题
二、选择题
下面哪个数据字段视图包含当前登录用户所拥有的对象的源代码?
A. user_objects
B. user_source
C. user_errors
D. user_tables
【B】源码放在source下面,没毛病。
定义一个函数时,如果参数既能赋一个值,也能从函数体中接收一个输出值,那么应该使用下面哪种模式的参数定义方式?
A. IN
B. OUT
C. IN OUT
D. NULL
【C】IN只能赋值,OUT只能接收输出值,IN OUT是两者的结合。
三、问答题
简述函数和过程的区别。
函数与过程一样,可以接收一个或多个参数,也可以没有参数,但是需要使用RETURN子句指定一个数据类型,函数的返回数据类型必须定义在函数参数定义的后面。
包的作用是什么?
通过包提供的信息封装功能,可以将程序实现的细节隐藏起来,包的调用者只能看到包的定义规范,而不能了解包中的具体实现细节。包的组织功能使得应用程序的设计人员采用自定向下的设计方式进行设计,使得PL/SQL可以适应大型的复杂的业务逻辑开发。
一、填空题
二、选择题
如果要保存 emp 表中的所有的员工名称,并且只在PL/SQL 中使用,应该定义哪种类型?
A. 记录
B. 索引表
C. 嵌套表
D. 变长数组
【B】索引表又称关联数组,一种多行单列的用来存储多个相同类型元素的数据结构。它不会存储到数据库,适合只在PL/SQL中使用。
在下面的哪种语句中可以使用嵌套表?
A. INSERT
B. ORDER BY
C. GROUP BY
D. DISTINCT
【A】嵌套表适合使用在INSERT、UPDATE等语句,不适合WHERE、ORDER BY、GROUP BY、DISTINCT等语句。
三、问答题
简述记录类型的作用。
记录类型的结构就好像是一个单行结构的表定义,它提供了一种较高层次的同时操作多个标量类型的能力,使得PL/SQL代码更加具有自我描述性。
简述集合类型的作用。
记录用于管理单行多列的数据结构,而集合则用来管理多行单列的数据结构。集合类似于高级语言中的数组,集合中的元素可以排序也可以未
一、填空题
二、选择题
替代触发器只能在下面的哪个数据库对象或者是操作中定义?
A. 表
B. 视图
C. 数据库启动
D. 创建数据表
【B】
要判断游标中 FETCH 到的行的记录数,应该使用哪个游标属性?
A. %FOUND
B. %ISOPEN
C. %NOTFOUND
D. %ROWCOUNT
【D】
三、问答题
触发器的作用是什么?
监控数据库表的变更:在对数据库表进行INSERT、UPDATE或者DELETE操作时,通过触发器可以验证数据的正确性,进行完整性约束检查或者是记录日志。
自动数据库维护:通过为数据库系统定义系统级的触发器,可以在数据库启动或者退出时,进行数据库的维护清理工作。
控制数据库管理任务:通过定义DDL语句触发器,可以添加、修改或删除数据库对象记录日志或进行安全性管理。
请简要介绍游标的操作步骤。
- 定义游标
- 打卡游标
- 提取游标数据
- 关闭游标
一、填空题
二、选择题
通过下面的哪个数据字典视图可以查看角色所具有的系统权限?
A. DBA_ROLES
B. ROLE_ROLE_PPRIVS
C. DBA_TAB_PRIVS
D. ROLE_SYS_PRIVS
【D】
下面哪个权限不属于对象权限?
A. ALTER
B. DELETE
C. EXECUTE
D. CREATE TYPE
【D】
三、问答题
请简单介绍方案与用户之间的区别。
用户是Oracle进行身份验证的一个数据库对象,客户端要成功地进入Oracle进行数据库操作,必须提供正确的用户名和密码。方案是用户所拥有的对象的集合,方案对象就是用户创建的对象。如scott方案对象,就是scott用户所拥有的对象。在Oracle中,用户与方案是一一对应的关系,而且一般用户名就是方案名。
权限与角色具有什么关系?
权限给用户一种行使Oracle数据库操作的权利,只有分配了特定的权限,用户才能进行一系列的操作,否则Oracle会抛出权利不足的错误消息。角色的引入可以简化权限的管理过程。
一、填空题
二、选择题
下面哪种类型不是表空间类型?
A. 系统表空间
B. 特殊表空间
C. 临时表空间
D. UNDO表空间
【B】表空间分四种:系统表空间,临时表空间,UNDO表空间,大文件表空间。
下面的那个数据字典视图可以查询表空间的使用状态?
A. DBA_TABLESPACES
B. DBA_DATA_FILES
C. DBA_FREE_SPACE
D. DBA_TABLES
【A】DBA_TABLESPACES用来查看当前表空间的信息;DBA_FREE_SPACE用来查看表空间的空余信息。
三、问答题
表空间的作用是什么?
在Oracle中,数据库数据最终存储为一系列的文件,Oracle出于跨平台的考虑,数据库对象实际上不直接对文件进行操作,而是抽象出了一个逻辑的层,这个层就是表空间。
如何创建UNDO表空间?
使用CREATE UNDO TABLESPACE 可以创建UNDO表空间。
一、填空题
二、选择题
下列关于数据泵的描述错误的是?
A. 数据泵是服务器端的程序
B. 数据泵可以直接备份到本地客户端文件夹
C. 使用数据泵必须要创建Oracle目录
D. 备份用户必须具有目录的写入权限
【B】
要进行联机热备份,必须进入数据库处理归档日志模式,归档模式要在数据库的什么模式下设置?
A. OPEN
B. UNMOUNT
C. MOUNT
D. CLOSED
【C】
三、问答题
什么是归档模式?
在非归档模式下,Oracle实例会联机重做日志组当做一个存储事务信息的循环缓冲区,在写满第一个日志文件后,开始写第二个,直到所有的日志文件写满为止。一旦最后一个联机重做日志文件也写满,日志写进程就开始重写第一个重做日志文件。而当以ARCHIVELOG模式运行时,后台进程在开始重写每一个重做日志文件之前,对日志进行复制归档,将这些归档的重做日志文件写入一个磁盘设备中。
数据库的启动顺序是什么?
- 读取数据库参数文件
- 读取所有的控制文件
- 读取所有的数据文件
- 读取所有的联机重做日志文件