题记:
本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。
36. 第36题:
- 题目
36.Examine this command:
- 解析及答案:
查看以下这条命令。以下哪两个陈述是正确的?
A. 在执行此命令期间,可以对在此数据文件中有一个或多个区(extents)的表执行数据操作语言(DML)操作。
B. 在默认情况下,它会覆盖在 /u02 目录下名为 SALES02.DBF 的任何现有文件。
C. 在执行此命令期间,可以查询在此数据文件中有一个或多个区的表。
D. 在移动之后,SALES01.DBF 中的压缩对象在 SALES02.DBF 中将会被解压。
E. 即使使用了 Oracle 管理文件(OMF),也必须指定包含新文件名的 "To" 子句。
选项 A:
如果执行的命令是在移动数据文件,一些数据库允许在特定条件下对涉及的数据表执行有限的 DML 操作。例如,某些数据库在数据文件移动过程中,只要数据的底层存储机制能够处理并发的读写操作,就可以允许 DML。这可能取决于数据库的具体实现和配置。所以这个选项有一定的可能性是正确的。
选项 B:
正常情况下,数据文件操作命令不会默认覆盖已有的文件。这是为了防止数据丢失等意外情况。所以该选项错误。
选项 C:
在数据文件执行命令期间,对有数据区在这个数据文件中的表进行查询通常是允许的。因为查询操作是只读的,一般不会干扰命令的执行过程,就像在备份数据文件等操作过程中,也可以进行查询一样。所以该选项正确。
选项 D:
移动数据文件本身通常不会改变文件内对象的压缩状态。压缩属性是和对象本身相关的,而不是因为文件位置的改变而改变。所以该选项错误。
选项 E:
当使用 Oracle 管理文件(OMF)时,很多时候文件名等细节是由系统自动管理的,不一定需要手动指定 "To" 子句。所以该选项错误。
正确答案是 AC。
37. 第37题:
- 题目
- 解析及答案:
关于替换变量,以下哪两个陈述是正确的?
A. 用于提示输入列名的替换变量必须用双引号括起来。
B. 以 "&" 为前缀的替换变量在一个会话中对一个值只会提示一次。
C. 用于提示输入列名的替换变量必须用单引号括起来。
D. 以 "&&" 为前缀的替换变量在一个会话中对一个值只会提示一次,除非在该会话中将其设置为未定义状态。
E. 替换变量只能在 SELECT 语句中使用。
F. 替换变量可以在 SELECT 语句的任何子句中使用。
选项 A:
用于提示列名的替换变量在某些情况下可以不用双引号。例如,如果列名是简单的、符合 SQL 命名规则且没有特殊字符或大小写问题,不使用双引号也可以正常工作。所以这个选项不完全正确。
选项 B:
以 "&" 开头的替换变量每次在语句中出现时都会提示输入值,而不是只提示一次,所以该选项错误。
选项 C:
如前面所说,一般不是用单引号来包围用于提示列名的替换变量,所以该选项错误。
选项 D:
以 "&&" 为前缀的替换变量通常在一个会话中只提示一次输入值,除非将其在会话中重新定义为未定义状态,所以该选项正确。
选项 E:
替换变量不只是用于 SELECT 语句,还可以用于 INSERT、UPDATE、DELETE 等其他 SQL 语句,所以该选项错误。
选项 F:
替换变量可以用于 SELECT 语句中的各种子句,包括 SELECT 子句、WHERE 子句、GROUP BY 子句、HAVING 子句等,所以该选项正确。
正确答案是 DF。
38. 第38题:
- 题目
38.Examine this description of the TRANSACTIONS table
Which two SQL statements execute successfully?
A.SELECT customer_id CUSTID, transaction date TRANS_DATE, amount+ 100 DUES FROM transactions
B.SELECT customer_id AS "CUSTOMER-ID", transaction date AS DATE, amount + 100 "DUES" FROM transactions
C.SELECT customer_id AS 'CUSTOMER-ID', transaction date AS DATE, amount + 100 'DUES' FROM transactions
D.SELECT customer_id AS "CUSTOMER-ID ", transaction date AS "DATE", amount +100 DUES FROM transactions
E.SELECT customer_id AS CUSTOMER-ID, transaction date AS TRANS DATE, amount 100 " DUES AMOUNT " FROM transactions - 解析及答案:
查看关于 "TRANSACTIONS" 表的如下描述。以下哪两个 SQL 语句能够成功执行?
A. SELECT customer_id CUSTID, transaction_date TRANS_DATE, amount + 100 DUES FROM transactions
在这条语句中,使用 "column_name alias_name" 的语法为 "customer_id" 创建了别名 "CUSTID",为 "transaction_date" 创建了别名 "TRANS_DATE",这种方式是正确的。并且 "amount + 100" 这个表达式是有效的,同时为它分配了别名 "DUES"。这条 SQL 语句在语法上是正确的,能够成功执行。所以,该选项正确。
B. SELECT customer_id AS "CUSTOMER-ID", transaction_date AS DATE, amount + 100 "DUES" FROM transactions
当使用带有空格或特殊字符的别名时,它们需要用双引号括起来。在这个选项中,为 "transaction_date" 创建的别名 "DATE" 以及为 "amount + 100" 创建的别名 "DUES" 没有正确地使用双引号括起来。它们应该用双引号括起来才能被识别为有效的别名。所以,该选项错误。
C. SELECT customer_id AS 'CUSTOMER-ID', transaction_date AS DATE, amount + 100 'DUES' FROM transactions
与选项 B 类似,当创建带有空格或特殊字符的别名时,应该使用双引号,而不是单引号。在这里,别名 "CUSTOMER-ID"、"DATE" 和 "DUES" 因为是用单引号括起来的,所以没有正确引用。所以,该选项错误。
D. SELECT customer_id AS "CUSTOMER-ID", transaction_date AS "DATE", amount + 100 DUES FROM transactions
别名 "CUSTOMER-ID"(注意破折号后面有个空格)和 "DATE" 都正确地用双引号括起来了。而且,为表达式 "amount + 100" 创建的别名 "DUES" 是有效的,因为它没有需要引用的空格或特殊字符。这条 SQL 语句在语法上是正确的,能够成功执行。所以,该选项正确。
E. SELECT customer_id AS CUSTOMER-ID, transaction_date AS TRANS DATE, amount 100 "DUES AMOUNT" FROM transactions
为 "customer_id" 创建的别名 "CUSTOMER-ID" 格式不正确。它要么应该按照 "column_name AS alias_name" 的格式并且在需要时进行正确引用,要么就使用 "column_name alias_name" 的格式。这里是一种不正确的组合方式。并且,为 "amount + 100" 创建的别名 "DUES AMOUNT" 因为有空格所以没有正确引用。所以,该选项错误。
答案是 A 和 D。
39. 第39题:
- 题目
- 解析及答案:
关于在未设置保证保留(GUARANTEED RETENTION)的情况下撤销保留(UNDO RETENTION)的配置和使用,以下哪两个陈述是正确的?
A. 未过期的撤销数据(UNDO)总是会被保留。
在未设置保证保留的情况下,未过期的撤销数据并非总是会被保留。如果系统需要空间来处理新的事务,就可能会覆盖未过期的撤销数据。所以,该选项错误。
B. 撤销保留(UNDO RETENTION)指定了 Oracle 尝试保留未过期撤销数据的时长。
在未设置保证保留的情况下,撤销保留(UNDO RETENTION)指定了 Oracle 尝试保留未过期撤销数据的时长。之所以说是尝试,是因为来自新事务的空间压力可能会导致未过期的撤销数据被覆盖。所以,该选项正确。
C. 撤销保留(UNDO_RETENTION)指定了 Oracle 尝试保留已过期和未过期撤销数据的时长。
撤销保留(UNDO_RETENTION)并不指定已过期撤销数据的保留时长。已过期的撤销数据会比未过期的撤销数据更快地被覆盖。撤销保留主要关注的是未过期的撤销数据。所以,该选项错误。
D. 撤销保留(UNDO RETENTION)指定了所有类型撤销数据的保留时长。
它并没有指定所有类型撤销数据的保留时长。如前文所述,它主要是关于尝试保留未过期的撤销数据,对于已过期的撤销数据并非以同样的方式进行规定。所以,该选项错误。
E. 活动的撤销数据(ACTIVE UNDO)总是会被保留。
活动的撤销数据总是会被保留。活动的撤销数据对于正在进行的事务的回滚是必需的。在一个事务被提交或回滚之前,其撤销信息被视为活动的,并且必须被保留以确保数据的一致性。所以,该选项正确。
正确的两个陈述是 B 和 E。
40. 第40题:
- 题目
- 解析及答案:
"ORDERS" 表有一个名为 "ORDER_DATE" 的数据列,其数据类型为 "DATE"。日期的默认显示格式是 "DD - MON - RR"。
以下哪两个 "WHERE" 条件展示了转换函数的正确用法?
A. WHERE order_date = TO_DATE (ADD_MONTHS (SYSDATE, 6), 'MON DD YYYY')
在此处,"TO_DATE" 函数的使用不正确。"ADD_MONTHS (SYSDATE, 6)" 这部分返回的是一个日期值,而它被用作 "TO_DATE" 函数的第一个参数,然而 "TO_DATE" 函数期望的是一个表示日期的字符串作为其第一个参数。正确的用法应该是先使用 "TO_CHAR" 函数将 "ADD_MONTHS (SYSDATE, 6)" 的结果转换为字符串,然后如果需要的话再将其传递给 "TO_DATE" 函数。所以,该选项错误。
B. WHERE TO_CHAR (order date, 'MON - DD - YYYY') = 'JAN 20 2019'
在此处,"TO_CHAR" 函数中的列名 "order date" 拼写有误(正确的应该是 "order_date")。如果我们纠正这个拼写错误,那么这就是转换函数的一种正确用法。它将 "order_date" 列从日期数据类型转换为指定格式的字符串,然后与另一个表示日期的字符串进行比较。所以,如果纠正拼写错误的话,该选项正确。
C. WHERE order_date > TO_DATE ('JUL 10 2018', 'MON DD YYYY')
这个选项展示了 "TO_DATE" 函数的正确用法。它将字符串 "JUL 10 2018" 按照指定格式 "MON DD YYYY" 转换为日期值,然后与 "order_date" 列(其数据类型为日期)进行比较。所以,该选项正确。
D. WHERE order_date = TO_CHAR (ADD_MONTHS (SYSDATE, 6), 'MON DD YYYY)
在这里,在与 "order_date" 列进行比较时,"TO_CHAR" 函数的使用不正确。"order_date" 列是日期类型,在没有对两边进行恰当转换的情况下,不能直接将其与 "TO_CHAR" 函数返回的字符串结果进行比较。正确的做法应该是要么将 "order_date" 列转换为字符串并匹配格式,要么将字符串转换为日期然后再进行比较。所以,该选项错误。
E. WHERE order_date IN (TO_DATE ('oct 21 2018', 'MON - DD - YYYY '), TO_CHAR ('Nov 21 2018', 'MON DD YYYY'))
在这个选项中,"TO_DATE" 和 "TO_CHAR" 函数的使用不一致。"TO_DATE" 函数在第一部分("oct 21 2018")的使用是正确的,但第二部分使用 "TO_CHAR ('Nov 21 2018', 'MON DD YYYY')" 是错误的。"TO_CHAR" 函数是用于将日期转换为字符串,而不是反过来。并且日期值 "Nov 21 2018" 对于 "TO_CHAR" 函数来说已经是一个字符串了,其格式也不正确。所以,该选项错误。
答案是 B 和 C。
未完待续。
关注作者,您将获得更多OCP考试及Oracle DB方面的实战经验。后续不定期分享DB核心知识和排障案例及经验、性能调优等