1、OCA 认证-8 及答案解析(总分:100.00,做题时间:90 分钟)一、不定项选择题(总题数:38,分数:100.00)1.撤消表空间有 10 个撤消段,但假定活动突然增多,有 20 个并发事务,会发生什么?(分数:3.00)A.Oracle 会创建另外 10 个撤消段B.事务会自动在 10 个撤消段中平衡C.10 个事务会被阻塞,直到提交了前 10 个事务为止D.会发生什么取决于 UNDO_RETENTION 设置2.用户报告“ORA-1555:Snapshot too old”错误,其原因可能是什么?(分数:3.00)A.生成快照的频率不够高B.撤消数据太旧了C.没有足够的撤消数据D.
2、撤消表空间保留数据的时间太长3.查看如下所示的查询与结果集。 (分数:3.00)A.1GBB.2GBC.3GBD.4GB4.何时把变更写入日志缓冲区?(分数:3.00)A.更新表块时B.更新索引块时C.更新撤消块时D.回滚操作过程中E.提交时F.运行查询,用未提交的变更访问块时5.即使使用自动撤消段,用户也仍会得到“快照过老”的错误。该怎么办?(分数:3.00)A.增加 UNDO_RETENTION 参数B.设置 RETENTION_GUARANTEE 参数C.调整查询,使它们运行得更快D.增加撤消表空间的大小E.启用 RETENTION GUARANTEEF.增加撤消段的大小6.下面哪个查询
3、投影 DEPARTMENTS 表中 DEPARTMENT_NAME 和 LOCATION_ID 列?(分数:3.00)A.SELECT DISTINCT DEPARTMENT_NAME,LOCATION_IDFROM DEPARTMENTS;B.SELECT DEPARTMENT_NAME,LOCATION_IDFROM DEPARTMENTS;C.SELECT DEPT_NAME,LOC_IDFROM DEPT;D.SELECT DEPARTMENT_NAME AS“LOCATION_ID“FROM DEPARTMENTS;7.在描述 EMPLOYEES 表之后,你会发现 SALARY 列的
4、数据类型为 NUMBER(8,2)。该列中不允许出现哪些SALARY 值?(分数:3.00)A.SALARY=12345678B.SALARY=123456.78C.SALARY=1234567.8D.SALARY=123456E.SALARY=12.348.描述 JOB_HISTORY 表之后,你会发现 START_DATE 和 END_DATE 列的数据类型是 DATE。考虑表达式“END_DATE-START DATE”,选择两个描述该表达式的正确句子。(分数:3.00)A.返回 DATE 数据类型的值B.返回 NUMBER 类型的值C.返回 VARCHAR2 类型的值D.表达式无效,因
5、为在使用 DATE 数据类型的列上不能执行算术运算E.表达式有效,因为在使用 DATE 数据类型的列上可以执行算术运算9.哪个语句返回来自 EMPLOYEES 表的唯一 JOB_ID 值?(分数:3.00)A.SELECT JOB_ID FROM EMPLOYEES;B.SELECT UNIOUE JOB_ID FROM EMPLOYEES;C.SELECT DISTINCT JOB_ID,EMPLOYEE_ID FROM EMPLOYEES;D.SELECT DISTINCT JOB_ID FROM EMPLOYEES;10.选择两个不合法的语句。两个正确语句生成相同的结果。两个不合法语句会
6、产生错误:(分数:3.00)A.SELECT DEPARTMENT_ID|“represents the“|DEPARTMENT_NAME|“Department“as“Department Info“FROM DEPARTMENTS;B.SELECT DEPARTMENT_ID|“represents the|DEPARTMENT_NAME|“Department“as“Department Info“FROM DEPARTMENTS;C.select department_id|“represents the“|department_name|“Department“Department
7、Info“from departments;D.SELECT DEPARTMENT_ID represents the DEPARTMENT_NAME Department as“Department Info“FROM DEPARTMENTS;11.下面 SELECT 语句中的哪两个子句有助于选择和投影?(分数:3.00)A.SELECT,FROMB.ORDER BY,WHEREC.SELECT,WHERED.SELECT,ORDER BY12.请选择一个 WHERE 子句,它从 DEPARTMENTS 表中提取包含字符字面值“er”的 DEPARTMENT_NAME 值。SELECT 和
8、FROM 子句是 SELECT DEPARTMENT_NAME FROM DEPARTMENTS。(分数:3.00)A.WHERE DEPARTMENT_NAME IN(“%e%r“);B.WHERE DEPARTMENT_NAME LIKE“%er%“;C.WHERE DEPARTMENT_NAME BETWEEN“e“AND“r“;D.WHERE DEPARTMENT_NAME CONTAINS“e%r“;13.下面哪些条件相互对等?(分数:3.00)A.WHERE SALARY=5000 AND SALARY=2000B.WHERE SALARY IN(2000,3000,4000,50
9、00)C.WHERE SALARY BETWEEN 2000 AND 5000D.WHERE SALARY2000 AND SALARY5000E.WHERE SALARY=2000 AND=500014.请选择两条关于 ORDER BY 子句错误的陈述。(分数:3.00)A.使用 ORDER BY 子句时,它总是带有一个行限制子句B.ORDER BY 子句可以出现在不包含 WHERE 子句的 SELECT 语句中C.ORDER BY 子句指定一项或者多项,并依据这些项排序检索的行。这些项只能是列名D.通过在 ORDER BY 子句中指定列的数字位置(按它们在 SELECT 列表中的顺序)来实
10、现位置排序15.在下面的查询中使用(分数:3.00)A.0B.1C.2D.316.在以下查询中使用限制行的子句时,会返回什么员工信息? SELECT employee_id,first_name FROM employees ORDER BY employee_id OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;(分数:3.00)A.employee_id 最高的 5 名员工B.employee_id 最低的 5 名员工C.employee_id 最低的第 6 到第 10 名员工D.employee_id 最高的第 6 到第 10 名员工E.employee_id
11、最低的 10 名员工F.以上都不是17.下面关于单行函数的描述哪个是正确的?(分数:3.00)A.它们返回多个结果B.它们为选中的每个记录都执行一次C.它们有零个或者多个输入参数D.它们必须至少有一个强制参数18.执行下面的语句之后会返回什么值: SELECT SUBSTR(“How_long_is_a_piece_of_string?“,5,4)FROM DUAL;(分数:3.00)A.longB._longC.ring?D.以上都不对19.执行下面的语句之后会返回什么值? SELECT INSTR(“How_long_is_a_piece_of_string?“,“_“,5,3)FROM
12、DUAL;(分数:3.00)A.4B.14C.12D.以上都不对20.执行下面的语句之后会返回什么值? SELECT MOD(14,3)FROM DUAL;(分数:3.00)A.3B.42C.2D.以上都不对21.执行下面的语句之后会返回什么值?注意 01-JAN-2009 是星期四。 SELECT NEXT_DAY(“01-JAN-2009“,“wed“)FROM DUAL;(分数:3.00)A.07-JAN-2009B.31-JAN-2009C.星期三D.以上都不对22.假设 SYSDATE=30-DEC-2007,那么执行下面的语句之后会返回什么值? SELECT TRUNC(SYSDA
13、TE,“YEAR“)FROM DUAL;(分数:3.00)A.31-DEC-2007B.01-JAN-2008C.01-JAN-2007D.以上都不对23.下面关于转换函数的描述,哪些不正确?(分数:3.00)A.TO_CHAR 可以将日期项转换为字符项B.TO_DATE 可以将字符项转换为日期项C.TO_CHAR 可以将数字项转换为字符项D.TO_DATE 可以将日期项转换为字符项24.如果 SYSDATE 返回 12-JUL-2009,那么下面的语句会返回什么值? SELECT TO_CHAR(SYSDATE,“fmDDth MONTH“)FROM DUAL;(分数:3.00)A.12TH
14、 JULYB.12th JulyC.TWELFTH JULYD.以上都不对25.执行下面的语句会返回什么值? SELECT NVL2(NULLIF(“CODA“,“SID“),“SPANIEL“,“TERRIER“)FROM DUAL;(分数:3.00)A.SPANIELB.TERRIERC.NULLD.以上都不对26.如果 SYSDATE 返回 12-JUL-2009,那么下面的语句返回什么值? SELECT DECODE(TO_CHAR(SYSDATE,“MM“),“02“,“TAX DUE“,“PARTY“)FROM DUAL;(分数:3.00)A.TAX DUEB.PARTYC.02D
15、.以上都不对27.下面的语句会返回什么结果? SELECT COUNT(*) FROM DUAL;(分数:3.00)A.NULLB.0C.1D.以上都不对28.下面关于分组函数的陈述,请选择一种正确说法。(分数:3.00)A.只有存在 GROUP BY 子句时才能使用分组函数B.分组函数每次可以作用于多行C.分组函数每次只能作用于一行D.在一个组中分组函数可以多次执行29.执行下面的语句会返回什么值? SELECT SUM(SALARY) FROM EMPLOYEES; 假设有 10 个员工记录,除了一条记录的 SALARY 字段是空值外,每条记录包含的 SALARY 值为 100。(分数:3
16、.00)A.900B.1000C.NULLD.以上都不对30.执行下面的语句会返回什么值? SELECT COUNT(*), COUNT(SALARY) FROM EMPLOYEES; 假设有 10 个员工记录,除了一条记录的 SALARY 字段是空值外,每条记录包含的 SALARY 值都为100。(分数:3.00)A.10 和 10B.10 和 NULLC.10 和 9D.以上都不对31.执行下面的语句会返回什么值? SELECT AVG(NVL(SALARY,100) FROM EMPLOYEES; 假设有 10 个员工记录,除了一条记录的 SALARY 字段是空值外,每条记录包含的 SA
17、LARY 值为 100。(分数:3.00)A.NULLB.90C.100D.以上都不对32.执行下面的语句会返回什么值? SELECT SUM(AVG(LENGTH(NVL(SALARY,0) FROM EMPLOYEES GROUP BY SALARY; 假设有 10 条员工记录,除了一条记录的 SALARY 字段是空值外,每条记录包含的 SALARY 值为 100。(分数:1.00)A.返回一个错误B.3C.4D.以上都不对33.下面的查询会返回多少条记录? SELECT SUM(SALARY),DEPARTMENT_ID FROM EMPLOYEES GROUP BY DEPARTMEN
18、T_ID; 假设有 11 个非空和 1 个空的唯一 DEPARTMENT_ID 值。所有记录都有一个非空 SALARY 值。(分数:1.00)A.12B.11C.NULLD.以上都不对34.执行下面的语句会返回什么值? SELECT JOB_ID,MAX_SALARY FROM JOBS GROUP BY MAX_SALARY; 假设 JOBS 表有 10 条记录,JOB ID 值都是 DBA,MAX_SALARY 值都是 100。(分数:1.00)A.包含值“DBA,100”的一行输出B.包含值“DBA,100”的 10 行输出C.返回一个错误D.以上都不对35.执行下面的语句会返回多少行数
19、据? SELECT DEPT_ID,SUM(NVL(SALARY,100)FROM EMP GROUP BY DEPT_ID HAVING SUM(SALARY)400; 假设 EMP 表有 10 行,除了一行的 SALARY 字段是空值外,每行包含的 SALARY 值都为 100。第一个 5 行的DEPT_ID 值为 10,第二个 5 行的 DEPT_ID 值为 20,其中一行的 SALARY 值为空。(分数:1.00)A.两行B.一行C.零行D.以上都不对36.执行下面的语句会返回多少行数据? SELECT DEPT_ID,SUM(SALARY)FROM EMP GROUP BY DEPT
20、_ID HAVING SUM(NVL(SALARY,100)400; 假设 EMP 表有 10 行,除了一行的 SALARY 字段是空值之外,每行包含的 SALARY 值都为 100。第一个 5 行的 DEPT_ID 值为 10,第二个 5 行的 DEPT_ID 值为 20,其中一行的 SALARY 值为空。(分数:1.00)A.两行B.一行C.零行D.以上都不对37.选择两个正确的语句。(分数:1.00)A.STDDEV 函数返回 VARIANCE 的平方根B.VARIANCE 函数返回 STDDEV 的平方根C.AVG 函数处理日期和数值数据D.LISTAGG 函数返回一列数据的数值总和E
21、.LISTAGG 函数返回某列的连接值38.执行如下语句后,返回多少行数据? select listagg(last_name)within group (order by department_id) from employees; 假定 EMPLOYEES 表有 10 个不同的 DEPARTMENT_ID 值,有 107 行。(分数:1.00)A.0B.1C.10D.107E.上述都不对OCA 认证-8 答案解析(总分:100.00,做题时间:90 分钟)一、不定项选择题(总题数:38,分数:100.00)1.撤消表空间有 10 个撤消段,但假定活动突然增多,有 20 个并发事务,会发生什
22、么?(分数:3.00)A.Oracle 会创建另外 10 个撤消段 B.事务会自动在 10 个撤消段中平衡C.10 个事务会被阻塞,直到提交了前 10 个事务为止D.会发生什么取决于 UNDO_RETENTION 设置解析:根据需求创建撤消段。 B、C 和 D 是不正确的。B 是不正确的,因为会创建更多的段。C 是不正确的,因为撤消段的数量没有限制。D 是不正确的,因为这个参数与事务不相关,只与查询相关。2.用户报告“ORA-1555:Snapshot too old”错误,其原因可能是什么?(分数:3.00)A.生成快照的频率不够高B.撤消数据太旧了C.没有足够的撤消数据 D.撤消表空间保留
23、数据的时间太长解析:“ORA-1555:快照太旧”错误清楚地表明,撤消数据不会保存足够长的时间,来满足查询工作负载。没有足够的撤消数据可用。 A、B 和 D 是不正确的。A 是不正确的,因为它根本没有引用撤消,而是引用了快照,它存在于数据库的早期版本中,但现在称为物化视图。B 和 D 都是不正确的,因为它们描述了在相反的情况下,撤消数据保留的时间超过了需要的时间。这不是一个问题,但它可能会浪费空间。3.查看如下所示的查询与结果集。 (分数:3.00)A.1GBB.2GBC.3GB D.4GB解析:在计算时,使用为期 10 分钟的 UNDBLKS 最大值。除以 600 得到每秒钟的撤消块生成率,
24、并乘以块大小得到字节值。再乘以 MAXQUERYLEN 的最大值,得到需要的空间(如果最高撤消生成率与时间最长的查询一致),除以十亿得到 GB 结果:237014/60040961740=2.6GB(近似值)。 A、B 和 D 是错误的。这些数字来自于对撤消计算的不正确理解。4.何时把变更写入日志缓冲区?(分数:3.00)A.更新表块时 B.更新索引块时 C.更新撤消块时 D.回滚操作过程中 E.提交时F.运行查询,用未提交的变更访问块时解析:对所有数据块的更改由重做数据保护。回滚操作会更改块,因此也会产生重做数据。 E 和 F 是不正确的。COMMIT 不写入更改,因为它们已经写入了。查询从
25、来不读写重做数据,但它们很可能读取撤消数据。5.即使使用自动撤消段,用户也仍会得到“快照过老”的错误。该怎么办?(分数:3.00)A.增加 UNDO_RETENTION 参数B.设置 RETENTION_GUARANTEE 参数C.调整查询,使它们运行得更快 D.增加撤消表空间的大小 E.启用 RETENTION GUARANTEE F.增加撤消段的大小解析:C 是正确的,因为使查询更快完成,将减少“快照太旧”的可能性。D 是正确的,因为它允许存储更多未到期的撤消数据。E 完整地解决了问题,但可能会导致事务出问题。 A、B 和 F 是不正确的。A 是不正确的,因为它本身没有帮助,它只是一个目标
26、,除非结合 E。B 是不正确的,因为没有这样的参数(但它是一个子句,可以应用于撤消表空间)。F 是不正确的,因为这不能手工完成,Oracle 会自动完成。6.下面哪个查询投影 DEPARTMENTS 表中 DEPARTMENT_NAME 和 LOCATION_ID 列?(分数:3.00)A.SELECT DISTINCT DEPARTMENT_NAME,LOCATION_IDFROM DEPARTMENTS;B.SELECT DEPARTMENT_NAME,LOCATION_IDFROM DEPARTMENTS; C.SELECT DEPT_NAME,LOC_IDFROM DEPT;D.SEL
27、ECT DEPARTMENT_NAME AS“LOCATION_ID“FROM DEPARTMENTS;解析:投影是对从表返回的列的限制。 A、C 和 D 不正确。排除 A,因为问题与数据的重复、独特性或者唯一性无关。C 错误地从不存在的表 DEPT中选择不存在的列 DEPT_NAME 和 LOC_ID。D 只返回被请求的列之一:DEPARTMENT_NAME。除了从DEPARTMENTS 表投影 LOCATION_ID 列,它还试图将 DEPARTMENT_NAME 列的别名设为 LOCATION_ID。7.在描述 EMPLOYEES 表之后,你会发现 SALARY 列的数据类型为 NUMB
28、ER(8,2)。该列中不允许出现哪些SALARY 值?(分数:3.00)A.SALARY=12345678 B.SALARY=123456.78C.SALARY=1234567.8 D.SALARY=123456E.SALARY=12.34解析:数据类型为 NUMBER(8,2)的列可以存储至多 8 位;其中,至多有两位数字在小数点右边。虽然 A和 C 是正确答案,但请注意,因为问题的措词是否定的,所以不允许在这样的列中存储这些值。不允许存储 A 和 C 这样的值,因为它们分别包含 8 个和 7 个整数位,但数据类型被限制为 6 个整数位和两个小数位。B、D 和 E 不正确。B、D 和 E 可
29、以存储在这种数据类型中,因此,不是这个问题的正确答案。D 说明只要整数部分的位数不超过 6 位,没有小数部分的数字也是该列的合法值。8.描述 JOB_HISTORY 表之后,你会发现 START_DATE 和 END_DATE 列的数据类型是 DATE。考虑表达式“END_DATE-START DATE”,选择两个描述该表达式的正确句子。(分数:3.00)A.返回 DATE 数据类型的值B.返回 NUMBER 类型的值 C.返回 VARCHAR2 类型的值D.表达式无效,因为在使用 DATE 数据类型的列上不能执行算术运算E.表达式有效,因为在使用 DATE 数据类型的列上可以执行算术运算 解
30、析:两个日期值之间的算术结果表示天数。 A、C 和 D 不正确。希望两个日期值之间的算术结果也是日期,这是一种常见错误,因此 A 表面看起来是对的,但其实它是错误的。9.哪个语句返回来自 EMPLOYEES 表的唯一 JOB_ID 值?(分数:3.00)A.SELECT JOB_ID FROM EMPLOYEES;B.SELECT UNIOUE JOB_ID FROM EMPLOYEES;C.SELECT DISTINCT JOB_ID,EMPLOYEE_ID FROM EMPLOYEES;D.SELECT DISTINCT JOB_ID FROM EMPLOYEES; 解析:将 DISTIN
31、CT 关键字应用于 JOB_ID 列,就可以从 EMPLOYEES 表投影唯一 JOB_ID 值。 A、B 和 C 是错误的,因为 A 返回无限制的 JOB_ID 值列表,包括重复值;B 在不正确的上下文中使用UNIQUE 关键字。C 选择 JOB_ID 和 EMPLOYEE_ID 值的不同组合。这产生的效果是从 EMPLOYEES 表返回所有行,因为 EMPLOYEE_ID 列包含每个员工记录的唯一值。另外,C 返回两列,这不是最初所请求的。10.选择两个不合法的语句。两个正确语句生成相同的结果。两个不合法语句会产生错误:(分数:3.00)A.SELECT DEPARTMENT_ID|“re
32、presents the“|DEPARTMENT_NAME|“Department“as“Department Info“FROM DEPARTMENTS;B.SELECT DEPARTMENT_ID|“represents the|DEPARTMENT_NAME|“Department“as“Department Info“FROM DEPARTMENTS; C.select department_id|“represents the“|department_name|“Department“Department Info“from departments;D.SELECT DEPARTME
33、NT_ID represents the DEPARTMENT_NAME Department as“Department Info“FROM DEPARTMENTS; 解析:B 和 D 是两个不合法语句,如果执行,它们将返回语法错误。这是一个具有迷惑性的问题,因为它要求的是不合法语句,而不是合法语句。B 不合法,因为它遗漏了包含字符字面值“represents the”的一个单引号。D 不合法,因为它没有使用单引号包含其字符字面值。 A 和 C 是合法语句,因此,在这个问题中,它们是不正确答案。A 和 C 看起来不同,因为 SQL 语句的大小写不同,A 使用别名关键字 AS,而 C 只是保留
34、表达式和别名之间的空格。A 和 C 产生的结果相同。11.下面 SELECT 语句中的哪两个子句有助于选择和投影?(分数:3.00)A.SELECT,FROMB.ORDER BY,WHEREC.SELECT,WHERE D.SELECT,ORDER BY解析:SELECT 子句通过指定从表中投影列的列表来实现投影,而 WHERE 子句通过限制依据条件检索的行来实现选择。 A、B 和 D 都不正确,因为 FROM 子句指定被投影的行的来源,而 ORDER BY 子句用于排序选中的行。12.请选择一个 WHERE 子句,它从 DEPARTMENTS 表中提取包含字符字面值“er”的 DEPARTM
35、ENT_NAME 值。SELECT 和 FROM 子句是 SELECT DEPARTMENT_NAME FROM DEPARTMENTS。(分数:3.00)A.WHERE DEPARTMENT_NAME IN(“%e%r“);B.WHERE DEPARTMENT_NAME LIKE“%er%“; C.WHERE DEPARTMENT_NAME BETWEEN“e“AND“r“;D.WHERE DEPARTMENT_NAME CONTAINS“e%r“;解析:LIKE 运算符测试各行的。DEPARTMENT_NAME 列是否包含字符“er”。字符字面值前后的百分比符号说明包含“er”字面值的所有
36、字符都是许可的。 A、C 和 D 不正确,A 和 C 在语法上是正确的。A 使用 IN 运算符,它用来测试集合成员。C 测试DEPARTMENT_NAME 列的字母值是否介于字母“e”和字母“r”之间。最后,D 使用单词“contains”,在该上下文中不能使用它。13.下面哪些条件相互对等?(分数:3.00)A.WHERE SALARY=5000 AND SALARY=2000 B.WHERE SALARY IN(2000,3000,4000,5000)C.WHERE SALARY BETWEEN 2000 AND 5000 D.WHERE SALARY2000 AND SALARY5000
37、E.WHERE SALARY=2000 AND=5000解析:每个条件都测试 SALARY 值在$2000 到$5000 的范围之内。 B、D 和 E 不正确。B 从集合中排除像$2500 这样的值;D 排除了$2000 和$5000 这两个边界值;E 不合法,因为它在 AND 运算符之后遗漏了 SALARY 列名。14.请选择两条关于 ORDER BY 子句错误的陈述。(分数:3.00)A.使用 ORDER BY 子句时,它总是带有一个行限制子句 B.ORDER BY 子句可以出现在不包含 WHERE 子句的 SELECT 语句中C.ORDER BY 子句指定一项或者多项,并依据这些项排序检
38、索的行。这些项只能是列名 D.通过在 ORDER BY 子句中指定列的数字位置(按它们在 SELECT 列表中的顺序)来实现位置排序解析:行限制子句是可选的,ORDERBY 子句中指定的项可以包含列名、位置排序、数字值和表达式。 B 和 D 不正确,因为它们是正确的陈述。15.在下面的查询中使用(分数:3.00)A.0B.1C.2D.3 解析:第一次执行语句时,在第三个(分数:3.00)A.employee_id 最高的 5 名员工B.employee_id 最低的 5 名员工C.employee_id 最低的第 6 到第 10 名员工 D.employee_id 最高的第 6 到第 10 名
39、员工E.employee_id 最低的 10 名员工F.以上都不是解析:结果按 employee_id 从最低到最高排序。OFFSET 5 子句把返回的行限制为第二组的 5 名员工记录。A、B、D 和 E 是不正确的。OFFSET 和 ORDER_BY 子句确定提取结果集的哪个部分和排序顺序,而 FETCH 子句决定最终检索多少行。17.下面关于单行函数的描述哪个是正确的?(分数:3.00)A.它们返回多个结果B.它们为选中的每个记录都执行一次 C.它们有零个或者多个输入参数 D.它们必须至少有一个强制参数解析:单行函数为数据集中选中的每条记录都执行一次,它可以没有输入参数(例如 SYSDAT
40、E),也可以有许多参数。 A 和 D 不正确,A 不正确是因为按定义函数只返回一个结果,D 不正确是因为有许多函数没有参数。18.执行下面的语句之后会返回什么值: SELECT SUBSTR(“How_long_is_a_piece_of_string?“,5,4)FROM DUAL;(分数:3.00)A.long B._longC.ring?D.以上都不对解析:SUBSTR 函数从给定输入字符串中提取包含四个字符的子字符串,从第 5 个字符开始(包含第 5 个字符)。位置 14 的字符是 How。从位置 5 的字符开始,接下来的四个字符是单词“long”。 B、C 和 D 不正确,因为 B
41、是从位置 4 开始的五字符子字符串,而 ring?虽然也是五个字符,但它是从给定字符串结尾开始的五个字符。19.执行下面的语句之后会返回什么值? SELECT INSTR(“How_long_is_a_piece_of_string?“,“_“,5,3)FROM DUAL;(分数:3.00)A.4B.14 C.12D.以上都不对解析:INSTR 函数返回搜索字符串第 n 次出现的位置,在启动搜索之后从起始位置开始可以找到该搜索字符串。该搜索字符串是下划线字符,从源字符串的位置 5 开始,该字符第三次出现的位置是位置 14。 A、C 和 D 不正确,因为位置 4 是搜索字符串第一次出现的位置,位
42、置 12 是搜索字符串从位置 1 开始第三次出现的位置。20.执行下面的语句之后会返回什么值? SELECT MOD(14,3)FROM DUAL;(分数:3.00)A.3B.42C.2 D.以上都不对解析:14 除以 3,结果是 4,余数是 2。 A、B 和 D 都不正确。因为 MOD 函数返回除法运算的余数。21.执行下面的语句之后会返回什么值?注意 01-JAN-2009 是星期四。 SELECT NEXT_DAY(“01-JAN-2009“,“wed“)FROM DUAL;(分数:3.00)A.07-JAN-2009 B.31-JAN-2009C.星期三D.以上都不对解析:因为 200
43、9 年 1 月的第一天是星期四,那么下一个星期三的日期应该是 6 天之后。 B、C 和 D 不正确。B 返回给定日期所属月份的最后一天,C 返回字符串而不是日期。22.假设 SYSDATE=30-DEC-2007,那么执行下面的语句之后会返回什么值? SELECT TRUNC(SYSDATE,“YEAR“)FROM DUAL;(分数:3.00)A.31-DEC-2007B.01-JAN-2008C.01-JAN-2007 D.以上都不对解析:日期 TRUNC 函数不执行舍入,因为截取的精度是 YEAR,所以忽略给定日期的日和月部分,返回它所属年的第一天。 A、B 和 D 不正确。A 返回给定日
44、期所属月份的最后一天,B 返回通过舍入而不是截取得到的结果。23.下面关于转换函数的描述,哪些不正确?(分数:3.00)A.TO_CHAR 可以将日期项转换为字符项B.TO_DATE 可以将字符项转换为日期项C.TO_CHAR 可以将数字项转换为字符项D.TO_DATE 可以将日期项转换为字符项 解析:只能使用 TO_CHAR 函数而不是 TO_DATE 函数将日期转换为字符串。 A、B 和 C 都不正确。它们都是正确的语句。24.如果 SYSDATE 返回 12-JUL-2009,那么下面的语句会返回什么值? SELECT TO_CHAR(SYSDATE,“fmDDth MONTH“)FRO
45、M DUAL;(分数:3.00)A.12TH JULY B.12th JulyC.TWELFTH JULYD.以上都不对解析:DD 部分以大写字母形式返回该月的日。因为它是数字,所以不要紧,除非应用“th“掩码,这里组成部分是大写字母形式。MONTH 返回用大写字母写的月。 B、C 和 D 不正确。如果格式掩码是“fmddth Month“,就会返回 B。如果格式掩码是“fmDDspth MONTH“,就会返回 C。25.执行下面的语句会返回什么值? SELECT NVL2(NULLIF(“CODA“,“SID“),“SPANIEL“,“TERRIER“)FROM DUAL;(分数:3.00)
46、A.SPANIEL B.TERRIERC.NULLD.以上都不对解析:NULLIF 函数比较它的两个参数。由于它们不相等,因此返回第一个参数。NVL2(“CODA“,“SPANIEL“,“TERRIER“)函数调用返回 SPANIEL,因为它的第一个参数不是空值。 B、C 和 D 都不正确。如果 NULLIF 函数返回 NULL。B 就是正确的,但只有该函数的两个参数完全相同,才会出现这种情况,而本题中,该函数的两个参数不相同。如果 NVL2 的第二个参数是 NULL,C 就是正确的,但本题不是这样。26.如果 SYSDATE 返回 12-JUL-2009,那么下面的语句返回什么值? SELE
47、CT DECODE(TO_CHAR(SYSDATE,“MM“),“02“,“TAX DUE“,“PARTY“)FROM DUAL;(分数:3.00)A.TAX DUEB.PARTY C.02D.以上都不对解析:最里面的函数 TO_CHAR(SYSDATE,“MM“)返回字符串“07“。外面的函数是 DECODE(“07“,“02“,“TAX DUE“,“PARTY“)。由于“07“与“02“不相等,因此返回另一个部分“PARTY“。 A、C 和 D 都不正确。只有从 SYSDATE 提取的月部分是“02“时才会返回 A。C 和 D 不是 DECODE 函数参数列表中的输出选项。27.下面的语句
48、会返回什么结果? SELECT COUNT(*) FROM DUAL;(分数:3.00)A.NULLB.0C.1 D.以上都不对解析:DUAL 表有一行和一列。COUNT(*)函数返回表或者组中的行数。 A、B 和 D 不正确。A 不正确是因为表可以有 0 行或多行数据,但不可能有 NULL 行。B 不正确是因为 DUAL表有一行。D 不正确是因为 C 正确。28.下面关于分组函数的陈述,请选择一种正确说法。(分数:3.00)A.只有存在 GROUP BY 子句时才能使用分组函数B.分组函数每次可以作用于多行 C.分组函数每次只能作用于一行D.在一个组中分组函数可以多次执行解析:按照定义,分组
49、函数每次作用于多行,这一点不同于单行函数。 A、C 和 D 不正确。A 不正确是因为在没有 GROUP BY 子句的情况下可以使用分组函数。这种情况下,将整个数据集作为一个组操作。C 不正确是因为 COUNT 函数通常对整个表执行,这个表相当于一个组。D 不正确是因为,将数据集划分到不同组之后,对每个组都要执行一次分组函数。29.执行下面的语句会返回什么值? SELECT SUM(SALARY) FROM EMPLOYEES; 假设有 10 个员工记录,除了一条记录的 SALARY 字段是空值外,每条记录包含的 SALARY 值为 100。(分数:3.00)A.900 B.1000C.NULLD.以上都不对解析:SUM 聚合函数忽略空值,将非空值相加。因为有 9 行包含的 SALARY 值是 100,所以返回 900。 B、C 和 D 不正确。如果执行 SUM(NVL(SALARY,100),就会返回 B 中的结果。C 是具有迷惑性的选择,因为包含 NULL 值的规则运算返回 NULL 结果。然而,聚合函数(除 COUNT(*)以外)都忽略 NULL 值。D 不正确是因为 A 正确。30.执行下面的语句会返回什么