SQL - 创建其他模式对象问题



1. 下列哪个数据库对象在用户和数据之间提供了一层抽象层?

  1. 视图
  2. 同义词

答案:C,D。视图和同义词本身不存储数据。视图是一个临时或虚拟表,用于检索存储在底层数据库表中的数据。

2. 下列哪个数据库对象可以生成序列号?

  1. 同义词
  2. 视图
  3. 序列

答案:D。可以创建一个序列来生成一系列整数。序列生成的值可以存储在任何表中。序列使用 CREATE SEQUENCE 命令创建。

3. 关于视图,哪些说法是正确的?

  1. 它们等于表
  2. 它们存储来自一个或多个表的数据
  3. 我们可以在简单视图上执行 SELECT 和其他 DML 操作
  4. 视图与表共享相同的命名空间,因此表和视图不能具有相同的名称

答案:C,D。不允许对包含分组函数、GROUP BY 子句、ROWNUM伪列或 DISTINCT 关键字的视图执行 DML 操作。

4. 为什么视图有用?(选择最合适的答案)

  1. 因为它们的名称比表短
  2. 为了防止用户访问表的列
  3. 为了简化用户的 SQL
  4. 以上所有

答案:B,C。视图是一个临时或虚拟表,用于检索存储在底层数据库表中的数据。每次使用视图时都必须执行视图查询。视图可用于简化查询或限制对敏感数据的访问。

5. 在以下哪些情况下,视图上不允许执行 DML 操作?

  1. 视图包含 GROUP BY 子句
  2. 基表包含 NOT NULL 列,但在视图查询中未选择
  3. 视图查询使用 ROWNUM 伪列
  4. 以上所有

答案:D。不允许对包含分组函数、GROUP BY 子句、ROWNUM 伪列或 DISTINCT 关键字的视图执行 DML 操作。

6. 视图可以从哪里获取数据?

  1. 来自相同模式的表
  2. 来自不同模式的表
  3. A 和 B
  4. 以上都不是

答案:C。

考虑给定的表结构和以下语句,并回答接下来的第 7 到第 9 个问题

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
CREATE VIEW emp_details AS
SELECT hire_date, job, salary, department_id FROM employees; 

7. 您发出以下查询。用户将看到多少列作为以下查询的结果?

SELECT * FROM emp_details WHERE department_id= 100;
  1. 0
  2. 1
  3. 2
  4. 4

答案:D。由于视图定义基于 EMPLOYEES 表中的四列,因此对包含所有列的视图的查询只会显示这四列。

8. 您需要除了以上 4 列之外还需要获取部门名称。以下哪个查询将为您提供所需的结果?

  1. SELECT E.*, dept_name
    FROM departments D join emp_details E
    ON (E.department_id= D.dept_id);
  2. SELECT hire_date, job, salary, dept_name FROM emp_details
  3. 这是不可能的,视图不能与其他表连接
  4. 以上都不是

答案:A。视图可以在 SELECT 查询中与其他表或视图连接。

9. 您需要找到最高薪水以及部门名称,以及在视图中选择的 4 列。以下哪个查询将为您提供所需的结果?

  1. Select dept_name, e.salary
    FROM departments D join emp_details E
    On (E.department_id= D.dept_id);
  2. Select dept_name, max(salary)
    FROM departments D join emp_details E
    On (E.department_id= D.dept_id)
    Group by dept_name;
  3. 视图不能出现在使用分组函数的查询中
  4. Select dept_name, max(salary)
    FROM departments D join emp_details E
    On (E.department_id= D.dept_id);

答案:B。

10. 关于同义词,以下哪些说法是正确的?

  1. PUBLIC 和 PRIVATE 同义词可以对同一个表具有相同的名称
  2. DROP SYNONYM 将删除同义词
  3. DROP PUBLIC SYNONYM 只能由 SYSDBA 执行
  4. 以上都不是

答案:A,C。同义词可以是私有同义词,用户使用它来引用他们拥有的对象,也可以是公共同义词,用户使用它来访问其他用户的数据库对象。只有 SYSDBA 或具有 DBA 权限的用户才能创建公共同义词。

11. 关于创建视图,哪些说法是正确的?(选择最合适的答案)

  1. 视图只能从表中创建
  2. 视图只能从一个表中创建
  3. 视图可以从一个或多个表或视图中创建
  4. 以上都不是

答案:C。包含表达式或函数或连接多个表的视图被认为是复杂视图。复杂视图只能用于更新一个表。

12. 在自己的模式中创建视图需要哪些权限?

  1. CREATE TABLE 系统权限
  2. CREATE VIEW 系统权限
  3. ALTER VIEW 系统权限
  4. CREATE ANY VIEW 系统权限

答案:B。用户需要 CREATE VIEW 权限才能在其自己的模式中创建视图。

13. 在其他人的模式中创建视图需要哪些权限?

  1. CREATE ANY VIEW
  2. CREATE VIEW
  3. A 和 B
  4. 以上都不是

答案:A。用户需要 CREATE ANY VIEW 权限才能在其他用户的模式中创建视图。

14. 对象视图或关系视图支持以下哪些内容?

  1. LOB
  2. 对象类型
  3. REF 数据类型
  4. 以上所有

答案:D。

15. 下列哪些是不同类型的视图?

  1. 简单视图
  2. 复杂视图
  3. A 和 B
  4. 以上都不是

答案:C。简单视图和复杂视图是两种类型的视图。简单视图基于仅引用一个表且不包含分组函数、表达式或 GROUP BY 子句的子查询。复杂视图基于从一个或多个表检索或派生数据的子查询,并且可以包含函数或分组数据。

16. 关于简单视图,哪些说法是正确的?

  1. 大多数情况下,可以对简单视图发出 DML 语句
  2. 只有一个源基表
  3. 不使用分组函数
  4. 以上所有

答案:D。简单视图基于仅引用一个表且不包含分组函数、表达式或 GROUP BY 子句的子查询。

17.关于复杂视图,哪些说法是正确的?

  1. 不能对复杂视图发出 DML 语句
  2. 包含多个基表
  3. 不能执行聚合
  4. 以上所有

答案:D。复杂视图基于从一个或多个表检索或派生数据的子查询,并且可以包含函数或分组数据。

18. 应该使用哪个关键字组合隐式删除视图(如果存在)并创建同名的新视图?

  1. CREATE VIEW
  2. REPLACE VIEW
  3. CREATE OR REPLACE VIEW
  4. 以上都不是

答案:C。OR REPLACE 选项通知 Oracle 11g 同名视图可能已经存在;如果存在,则应将视图的先前版本替换为新命令中定义的版本。

19. 视图如何在数据字典中存储?

  1. 作为 WHERE 子句
  2. 作为 CREATE 语句
  3. 作为 UPDATE 语句
  4. 作为 SELECT 语句

答案:D。

20. 下列哪些可以包含单行函数?

  1. 内联视图
  2. 简单视图
  3. 复杂视图
  4. 复合视图

答案:A,B。单行函数可用于内联视图和简单视图。

21. 下列哪些可以包含一组数据?

  1. 复合视图
  2. 简单视图
  3. 复杂视图
  4. 以上都不是

答案:C。复杂视图可以在查询中使用分组函数。

22. 关于视图,以下哪些说法是正确的?

  1. 可以在 CREATE VIEW 语句中嵌入子查询
  2. 在 CREATE VIEW 语句中使用的子查询必须具有简单的 SELECT 语法
  3. 当在 CREATE VIEW 语句中使用子查询时,不能使用 WHERE 子句
  4. 以上都不是

答案:A。视图定义可以使用子查询。

23. 即使基表不存在,以下哪个可以创建视图?

  1. NOFORCE
  2. FORCE
  3. OR REPLACE
  4. CREATE VIEW

答案:B。如果在 CREATE 子句中包含 FORCE 关键字,则 Oracle 11g 即使任何引用的表不存在也会创建视图。NOFORCE 是 CREATE VIEW 命令的默认模式,这意味着所有表和列都必须有效,否则视图不会创建。

24. 以下哪个命令确保不能对视图执行 DML 操作?

  1. NOFORCE
  2. FORCE
  3. WITH READ ONLY
  4. OR REPLACE

答案:C。WITH READ ONLY 选项可防止对视图执行任何 DML 操作。当重要的是用户只能查询数据,而不能对其进行任何更改时,通常使用此选项。

25. 关于 CREATE VIEW 语句中的 NOFORCE 选项,哪些说法是正确的?

  1. 即使基表不存在,它也会创建视图。
  2. 只有在基表存在时,它才会创建视图。
  3. 它是创建视图时的默认设置。
  4. 以上都不是

答案:B,C。NOFORCE 是 CREATE VIEW 命令的默认模式,这意味着所有表和列都必须有效,否则视图不会创建。

26. 关于 OR REPLACE 关键字,哪些说法是正确的?

  1. 使用此关键字创建视图时,对象权限会丢失
  2. 不需要重新授予以前在此视图上授予的对象权限
  3. A 和 B 都不是
  4. 以上都不是

答案:B。OR REPLACE 选项通知 Oracle 11g 同名视图可能已经存在;如果存在,则应将视图的先前版本替换为新命令中定义的版本。

27. 关于访问以下视图,哪些说法是正确的?(假设给定的表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
CREATE VIEW salVU100
AS SELECT employee_id  ID_NUMBER, last_name NAME, salary*12 ANNUAL_SAL
FROM employees E 
WHERE department_id= 100; 
  1. 必须使用基表中定义的原始列名来访问视图
  2. 必须使用视图查询中给出的别名来访问视图
  3. 视图是一个简单视图
  4. 以上都不是

答案:B,C。如果视图定义包含列的别名,则视图必须引用列别名。

28.关于访问以下视图的说法正确的是什么?(假设给出了表结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
CREATE VIEW salVU100 (ID_NUMBER, NAME, ANNUAL_SAL)
AS SELECT employee_id , last_name, salary*12 
FROM employees E 
WHERE department_id= 100; 
  1. 子查询中别名的数量不必与表达式的数量匹配
  2. 列出的别名数量必须与子查询中选择的表达式数量匹配
  3. 创建视图时必须指定别名
  4. 以上都不是

答案:B。如果在视图标题中指定了别名,则`SELECT`查询中必须选择相同数量的列。

29.考虑以下语句和给定的表结构

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
CREATE OR REPLACE VIEW empVU100
(ID_NUMBER, NAME, ANNUAL_SAL, DEPT_ID)
AS 
SELECT employee_id , first_name ||' '|| last_name, salary, department_id
FROM employees
WHERE department_id= 100; 

关于上述查询中的列别名,哪个说法是正确的?

  1. 列别名的顺序与子查询中的列顺序不同
  2. 列别名的顺序与子查询中的列顺序相同
  3. 使用`CREATE OR REPLACE`关键字时,列别名是必须的
  4. 使用`CREATE OR REPLACE`时,我们不能使用连接

答案:B。

考虑以下语句,并回答接下来的第30到34题

CREATE OR REPLACE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) 
AS 
SELECT d.dept_name, MIN(e.salary), MAX(e.salary), AVG (e.salary)
FROM employees e JOIN departments d 
ON (e.department_id= d.dept_id)
GROUP BY d.dept_name; 

30.关于上述语句,可以说什么?

  1. 为视图指定了替代名称
  2. 如果任何列都源自函数或表达式,则必须指定替代名称
  3. A 和 B
  4. 以上都不是

答案:C。指定别名名称是良好的编程习惯,可以提高代码和视图查询的可读性。

31.如果上述语句修改如下,将会发生什么?

CREATE OR REPLACE VIEW dept_sum_vu(name, maxsal, minsal, avgsal)
AS 
SELECT d.dept_name, MIN(e.salary), MAX(e.salary), AVG (e.salary)
FROM employees e JOIN departments d 
ON (e.department_id= d.dept_id)
GROUP BY d.dept_name; 
  1. 它与原始语句没有区别
  2. 它将成功执行并给出相同的结果,但别名名称会更改。
  3. 它将抛出一个ORA错误
  4. 以上都不是

答案:B。列别名的顺序并不重要,因为它们不具有任何行为属性。

32.确定以下`DELETE`语句的输出。

DELETE FROM dept_sum_vu; 
  1. 它将删除视图
  2. 它将删除视图中的所有行,但视图的结构将保持不变
  3. 它将抛出一个ORA错误
  4. 以上都不是

答案:C。视图`DEPT_SUM_VU`是一个复杂视图。不能对复杂视图执行DML操作。

33.假设您将上述查询修改如下

CREATE OR REPLACE VIEW dept_sum_vu(name, sal) 
AS 
SELECT d.dept_name, e.salary 
FROM employees e JOIN departments d 
ON (e.department_id= d.dept_id)
Where rownum < 10; 

修改的影响是什么?

  1. 可以更新视图来更新`EMPLOYEES`和`DEPARTMENTS`表中的值
  2. 不能通过视图删除`EMPLOYEES`和`DEPARTMENTS`表中的数据
  3. 可以通过视图插入`EMPLOYEES`和`DEPARTMENTS`表中的数据
  4. 可以通过视图向`EMPLOYEES`表添加一列

答案:B。不能对复杂视图执行DML操作。`DEPT_SUM_VU`是一个复杂视图,因为它连接了多个表。在视图上无法执行DDL操作。

34.假设您在上述问题中使用的视图查询中选择不同的部门和员工工资。如果您尝试从视图`dept_sum_vu`中删除行,结果会怎样?

  1. 行将被删除,不会出现任何错误
  2. 只有前10行将被删除
  3. 无法删除行。
  4. 以上都不是

答案:C。视图`DEPT_SUM_VU`仍然是一个复杂视图,因为它使用了`DISTINCT`关键字。因此,无法对其执行DML操作。

35.何时可以删除视图中的行?

  1. 无法通过视图删除行
  2. 它应该是一个简单视图
  3. 它应该是一个复杂视图
  4. 以上都不是

答案:B。只有简单视图才能执行DML操作。

36.何时不能修改视图中的数据?

  1. 当存在分组表达式时
  2. 当存在`GROUP BY`子句时
  3. 当在视图查询中使用`ROWNUM`时
  4. 以上所有

答案:D。在包含组函数、伪列或`DISTINCT`关键字的视图上,`UPDATE`操作是不可能的。

37. `JOB_HISTORY`表由用户“Andy”拥有。“Andy”授予另一个用户“HR”对`JOB_HISTORY`表的`SELECT`权限。哪个语句可以创建同义词`EMP_JOBS`,以便“HR”可以成功执行以下查询?(假设表结构如给定)

SQL> desc job_history
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 START_DATE		 NOT NULL DATE
 END_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 DEPARTMENT_ID			  NUMBER(4)
SELECT * from EMP_JOBS; 
  1. Andy发出 -
    CREATE SYNONYM EMP_JOBS for JOB_HISTORY
  2. HR发出 -
    CREATE SYNONYM EMP_JOBS for andy.JOB_HISTORY
  3. HR发出 -
    CREATE PUBLIC SYNONYM EMP_JOBS FOR andy.JOB_HISTORY
  4. 以上都不是

答案:B。只有`SYSDBA`或具有DBA权限的用户才能创建公共同义词。

38.哪个关键字可以确保对视图执行的DML操作保持在视图的范围内?

  1. OR REPLACE
  2. CREATE
  3. WITH CHECK OPTION
  4. 以上都不是

答案:C。`WITH CHECK OPTION`约束确保对视图执行的任何DML操作(例如添加行或更改数据)都不会阻止视图访问该行,因为它不再满足`WHERE`子句中的条件。

考虑以下表结构和给定的语句,并回答接下来的第39和40题

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
CREATE OR REPLACE VIEW empvu100
AS 
SELECT * FROM employees 
WHERE department_id= 100
WITH CHECK OPTION CONSTRAINT empvu100_ck; 

39.上述语句会做什么?

  1. 它允许用户对所有部门执行`INSERT`或`UPDATE`操作
  2. 它允许用户对任何部门ID为100的行执行`INSERT`或`UPDATE`操作
  3. 用户可以更新`employees`表中的任何行
  4. 用户可以在`employees`表中无限制地插入行

答案:B。`WITH CHECK OPTION`约束确保对视图执行的任何DML操作(例如添加行或更改数据)都不会阻止视图访问该行,因为它不再满足`WHERE`子句中的条件。如果对部门ID不是100的任何行执行`INSERT`或`UPDATE`操作,则会抛出ORA错误。

40.假设您执行如下所示的`UPDATE`语句

UPDATE empvu100
Set department_id = 200
Where employee_id  = 121; 

此语句的结果是什么?

  1. 没有更新任何行
  2. 抛出一个ORA错误
  3. A 和 B
  4. 以上都不是

答案:C。如果更新带有`CHECK OPTION`的视图,并且新记录的值违反了视图的范围,则会引发ORA异常“ORA-01402: view WITH CHECK OPTION where-clause violation”。

41.关于`WITH CHECK CONSTRAINT`,哪个说法是正确的?

  1. 通过视图执行的`INSERT`或`UPDATE`操作不能创建视图无法选择的行
  2. 只有通过视图执行的`INSERT`操作不能创建视图无法选择的行
  3. 只有通过视图执行的`UPDATE`操作不能创建视图无法选择的行
  4. 以上都不是

答案:A。

42.如何阻止对视图进行DML操作?

  1. 通过定义`WITH CHECK OPTION`约束
  2. 通过定义`WITH READ ONLY`选项
  3. A 和 B 都不是
  4. 以上都不是

答案:B。`WITH READ ONLY`选项阻止对视图执行任何DML操作。当重要的是用户只能查询数据,而不能更改数据时,经常使用此选项。

考虑表结构和给定的语句,并回答接下来的第43、44和45题

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
CREATE OR REPLACE empvu100(employee_id , first_name, job)
AS 
SELECT employee_id , last_name, job
FROM employees
WHERE department_id = 100
WITH READ ONLY; 

43.关于上述语句,哪个说法是正确的?

  1. 视图将不会创建
  2. 对该视图的`INSERT`操作将抛出一个ORA错误
  3. 更新部门100中所有员工的行时,将抛出一个ORA错误
  4. 以上都不是

答案:B,C。不允许对使用`READ ONLY`选项创建的视图执行DML操作。

44.可以从上述视图中删除多少行?

  1. 视图的所有行
  2. 只有部门100的所有行
  3. 没有行
  4. 以上都不是

答案:C。不允许对使用`READ ONLY`选项创建的视图执行DML操作。

45.以下哪个语句将删除如上创建的视图?

  1. DROP READ ONLY VIEW empvu100;
  2. DROP NOFORCE empvu100;
  3. DROP VIEW empvu100;
  4. 以上都不是

答案:C。可以使用`DROP VIEW`命令删除只读视图。

46.关于删除视图,哪个说法是正确的?

  1. 视图中来自基表的列也将被删除
  2. 视图的定义将从数据库中删除
  3. 删除视图对底层基表没有影响
  4. 以上都不是

答案:B,C。

47.用户应该拥有哪些权限才能删除视图?

  1. CREATE ANY VIEW
  2. CREATE VIEW
  3. DROP ANY VIEW
  4. DROP VIEW

答案:C。

48.关于序列,哪个说法是正确的?

  1. 它生成整数
  2. 它是一个可共享的对象
  3. 可用于创建主键值
  4. 以上所有

答案:D。当序列缓存在内存中时,它可以提高访问序列值的效率

49.关于序列,哪个说法是正确的?

  1. 它在安装Oracle数据库时创建
  2. 它由拥有`CREATE SEQUENCE`系统权限的用户创建
  3. 它不能被两个以上用户共享
  4. 数据库断开连接时,它会自动删除。

答案:B,C。用户需要`CREATE SEQUENCE`系统权限才能在其自己的模式中创建序列,其他用户无法共享该序列。

50.关于序列,以下哪个选项是正确的?

  1. 为一个表生成的序列整数不能被其他表使用
  2. 序列只能递增
  3. 如果另一个序列生成相同的整数,则序列将失效
  4. 一个序列可以被多个表使用,并且它们可以递增或递减

答案:D。

考虑以下语句,并回答接下来的第51到59题

CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 100
START WITH 101
MAXVALUE 9999
NOCACHE
NOCYCLE;

51.此序列生成的第一个值是什么?

  1. 1
  2. 100
  3. 101
  4. 9999

答案:C。`START WITH`子句为序列建立起始值。除非在`START WITH`子句中指定了另一个值,否则Oracle 11g将每个序列都从1开始。

52.此序列生成的最后一个值可能是什么?

  1. 0
  2. 100
  3. 101
  4. 9999

答案:D。`MINVALUE`和`MAXVALUE`子句为序列建立最小值或最大值。

53.此序列生成的第二个值是什么?

  1. 102
  2. 100
  3. 99
  4. 9999

答案:A。`INCREMENT BY`子句指定两个连续值之间的间隔。如果序列按正值递增,则序列生成的数值按升序排列。但是,如果指定负值,则序列生成的数值按降序排列。如果没有在创建序列时包含`INCREMENT BY`子句,则使用默认设置,即为每个生成的整数增加1。

54.此序列达到最大整数9999后,下一个值是什么?

  1. 101
  2. 没有值
  3. 它将抛出一个ORA错误
  4. 以上都不是

答案:B。`CYCLE`和`NOCYCLE`选项决定Oracle 11g是否应该在达到最小值或最大值后重新开始从序列中重新发布值。

55.根据上面给出的序列,Oracle将在内存中预分配多少个值?

  1. 20
  2. 0
  3. 100
  4. 9999

答案:A。

56.您执行以下查询

SELECT dept_depid_seq.NEXTVAL from dual; 
假设序列生成的最后一个值为200,此查询的结果是什么?
  1. 200
  2. 101
  3. 9999
  4. 201

答案:D。`NEXTVAL`伪列将生成序列的下一个唯一整数。

57.您执行以下查询

SELECT dept_depid_seq.CURRVAL from dual; 
假设序列生成的最后一个值为200,此查询的结果是什么?
  1. 200
  2. 101
  3. 9999
  4. 201

答案:A。`CURRVAL`伪列将生成序列已生成的当前唯一整数。

58.假设您需要将此序列的起始值更改为1000。以下哪个语句会有帮助?

  1. ALTER dept_deptid_seq
    INCREMENT BY 100
    START WITH 1000
    MAXVALUE 9999
    NOCACHE
    NOCYCLE; 
  2. 必须删除并重新创建序列才能使序列从1000开始。
  3. ALTER SEQUENCE dept_deptid_seq
    START WITH 101
  4. ALTER SEQUENCE dept_deptid_seq
    INCREMENT BY 100
    START WITH 101
    CYCLE;

答案:B。序列的起始编号不能修改。Oracle会引发异常“ORA-02283: cannot alter starting sequence number”。

59.假设上述序列修改如下

ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 100
START WITH 101
MAXVALUE 99
NOCACHE
NOCYCLE; 

此更改的结果是什么?

  1. ORA错误
  2. 修改后序列的最大值现在为99
  3. A 和 B 都不是
  4. 以上都不是

答案:A。修改序列时,`MAXVALUE`不能小于`START WITH`值。

60.何时可以在序列中使用`CYCLE`选项?

  1. 如果我们想更快地清除旧行
  2. 如果我们不想使用序列生成主键值
  3. A 和 B
  4. 以上都不是

答案:C。`CYCLE`和`NOCYCLE`选项决定Oracle 11g是否应该在达到最小值或最大值后重新开始从序列中重新发布值。如果指定了`CYCLE`选项并且Oracle 11g达到了升序序列的最大值或降序序列的最小值,则`CYCLE`选项将再次启动数字循环。

61.关于`NEXTVAL`伪列,哪个说法是正确的?

  1. 它重新生成序列的`CURRVAL`
  2. 它返回下一个可用的序列值
  3. 它可以返回重复值
  4. 它为不同的用户生成相同的值

答案:B。伪列 NEXTVAL (NEXT VALUE) 用于实际生成序列值。换句话说,它调用序列对象并请求序列中下一个数字的值。生成值后,将其存储在 CURRVAL (CURRENT VALUE) 伪列中,以便您可以再次引用它。

62.关于 CURRVAL 伪列,哪个说法是正确的?

  1. 相对于序列,可以在 NEXTVAL 之前使用 CURRVAL
  2. CURRVAL 给出序列的当前值
  3. CURRVAL 可以给出重复值
  4. 以上都不是

答案:B。

63.NEXTVAL 和 CURRVAL 可在何时使用?

  1. INSERT 语句的 SET 子句
  2. UPDATE 语句的 VALUES 子句
  3. SELECT 语句的 SELECT 列表(不是子查询的一部分)
  4. INSERT 语句的 SELECT 列表

答案:C, D。序列可在 SELECT 查询、PL/SQL 游标或 IAS (INSERT-AS-SELECT) 直接操作中使用。

64.NEXTVAL 和 CURRVAL 在何时不可使用?

  1. 视图的 SELECT 列表
  2. 带有 DISTINCT 关键字的 SELECT 语句
  3. SELECT、DELETE 或 UPDATE 语句中的子查询
  4. 以上所有

答案:D。

请考虑给定的语句,并回答接下来的第 65 和 66 题

CREATE TABLE employees 
(employee_id  NUMBER(4) DEFAULT emp_empid_seq.CURRVAL,
 department_id NUMBER(4)); 

65.此语句的结果是什么?(假设 emp_empid_seq 是用于生成员工 ID 值的序列)

  1. 表将被创建
  2. department_id 列将包含为员工 ID 生成的序列值
  3. department_id 列将具有默认值
  4. ORA错误

答案:D。在列定义的 DEFAULT 子句中不能指定伪列。

66.如果将 CURRVAL 替换为 NEXTVAL,此语句的结果是什么?(假设 emp_empid_seq 用于生成员工 ID 值)

  1. 表将被创建
  2. department_id 列将包含为员工 ID 生成的序列值
  3. department_id 列将具有默认值
  4. ORA错误

答案:D。在列定义的 DEFAULT 子句中不能指定伪列。

检查给定的图表,其中给出了 Departments 和 Location 表的结构。回答接下来的第 67 和 68 题

SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
SQL> desc locations
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 LOCATION_ID		 NOT NULL NUMBER(4)
 STREET_ADDRESS 		  VARCHAR2(40)
 POSTAL_CODE			  VARCHAR2(12)
 CITY			 NOT NULL VARCHAR2(30)
 STATE_PROVINCE 		  VARCHAR2(25)
 COUNTRY_ID			  CHAR(2)

67.您需要在位置 ID 1000 中插入一个名为“HR”的新部门。以下哪个语句可以提供所需的结果?

  1. INSERT INTO departments (dept_id, dept_name, location_id)
    VALUES (dept_deptid_seq.NEXTVAL, 'HR', 1000); 
  2. INSERT INTO departments (dept_id, dept_name, location_id)
    VALUES (dept_deptid_seq.NEXTVAL, "HR", 1000); 
  3. INSERT INTO departments (dept_id, dept_name, location_id)
    VALUES (dept_deptid_seq.CURRVAL, 'HR', 1000); 
  4. 以上都不是

答案:A。选项 C 将导致“唯一约束冲突”,因为它将尝试插入 DEPARTMENTS 表中已存在的部门 ID 的当前值。

68.假设您在插入第 67 题选项 A 中所示的值之前执行以下查询。查询的结果是什么?

SELECT dept_deptid_seq.CURRVAL FROM DUAL; 
  1. ORA错误
  2. 它将给出序列的当前值
  3. A 和 B 都不是
  4. 以上都不是

答案:B。当用户登录到 Oracle 11g 时,最初不会在 CURRVAL 伪列中存储任何值;当前值为 NULL。发出 NEXTVAL 调用以生成序列值后,CURRVAL 会存储该值,直到生成下一个值为止。CURRVAL 只包含最后生成的值。

69.序列值中如何出现间隙?

  1. 发生回滚时
  2. 系统崩溃
  3. 序列在另一个表中使用
  4. 以上所有

答案:D。

70.关于缓存序列值,哪个说法是正确的?

  1. 在 Oracle 中无法缓存序列值
  2. 达到序列的最大限制时,缓存将被填充
  3. 第一次引用序列时开始缓存
  4. 以上都不是

答案:C。如果在创建序列时指定了 NOCACHE 选项,则在收到请求时生成每个数字。但是,如果组织的事务在整个会话中需要大量的顺序编号,则可以使用 CACHE 选项让 Oracle 11g 预先生成一组值并将它们存储在服务器的内存中。然后,当用户请求序列值时,将分配下一个可用值——无需 Oracle 11g 生成该数字。另一方面,如果没有指定 CACHE 选项,Oracle 11g 将假设默认选项 CACHE 20 并自动将 20 个顺序值存储在内存中供用户访问。

71.在插入五个员工详细信息的事务之后,执行以下关于序列 EMP_EMPID_SEQ 的查询。

Select emp_empID_seq.CURRVAL from dual; 

假设员工事务回滚。上述查询的结果是什么?

  1. 员工事务开始时的序列值
  2. NULL
  3. 员工事务结束时的序列值
  4. 以上都不是

答案:C。序列值不受提交或回滚的影响。如果使用序列生成器的事务回滚,则序列值将被浪费并且无法恢复。

72.修改序列需要哪些权限?

  1. CREATE OR REPLACE 权限
  2. 序列的 ALTER 权限
  3. ALTER TABLE 权限
  4. UPDATE 权限

答案:B。要更改序列,序列必须位于您自己的模式中,或者您必须对序列具有 ALTER 对象权限,或者您必须具有 ALTER ANY SEQUENCE 系统权限。

73.序列被更改时会发生什么?

  1. 序列已生成的现有整数也将被更改
  2. 只有将来的整数受到影响
  3. 序列停止缓存将来的整数
  4. 以上都不是

答案:B。通过使用 ALTER SEQUENCE 命令,任何更改都只应用于修改后生成的值。

74.假设您需要删除一个序列。以下哪个命令会有帮助?

  1. ALTER SEQUENCE sequence_name START WITH NULL;
  2. DROP sequence_name;
  3. DROP SEQUENCE sequence_name;
  4. 以上都不是

答案:C。DROP 命令用于删除序列

75.以下哪个权限允许您删除序列?(选择最合适的答案)

  1. ALTER SEQUENCE
  2. ALTER TABLE
  3. DROP SEQUENCE
  4. DROP ANY SEQUENCE

答案:D。要删除序列,序列必须位于您自己的模式中,或者您必须具有 DROP ANY SEQUENCE 系统权限。

76.关于索引,哪个说法是正确的?

  1. 索引只能手动创建
  2. 索引只能自动创建
  3. A 和 B
  4. 以上都不是

答案:D。索引可以手动创建,也可以在执行某些操作(例如创建主键或唯一约束)后自动创建。

77.索引使用什么来快速定位数据?

  1. ROWNUM
  2. ROWID
  3. 序列
  4. 以上都不是

答案:B。Oracle 11g 索引是一个数据库对象,它存储列值和匹配表行的 ROWID 的映射。ROWID 是表行的物理地址。

78.当表的一列上没有索引时会发生什么?

  1. 数据被快速定位
  2. 将进行全表扫描
  3. 表无法创建
  4. 表无法更改

答案:B。

79.关于索引,以下哪个说法是正确的?

  1. 索引减少磁盘 I/O
  2. 索引快速定位数据
  3. 索引在逻辑上和物理上独立于它们所索引的表
  4. 以上所有

答案:D。

80.如果删除索引会发生什么?

  1. 创建索引的列也将被删除
  2. 创建索引的表也将被删除
  3. 创建后的索引无法删除
  4. 由于索引在逻辑上和物理上都是独立的对象,因此可以删除它们而不会影响其他对象

答案:D。索引是在模式中物理存储的对象。删除索引不会影响其他对象。

81.删除表时会发生什么?

  1. 索引仍然保留,因为它们在逻辑上和物理上都是独立的对象
  2. 表中的索引也将被删除
  3. A 和 B 都不是
  4. 以上都不是

答案:B。

82.索引是如何自动创建的?

  1. 创建表时
  2. 更改表时
  3. 在表的列(或列组)上定义 PRIMARY KEY 时
  4. 在表定义中定义 UNIQUE KEY 约束时

答案:C, D。

83.可以为以下哪些对象创建同义词?

  1. 只有表和视图
  2. 表、视图和序列
  3. 存储过程、函数或包
  4. 同义词

答案:B, C, D。您可以为其创建同义词的模式对象可以是以下类型:表或对象表、视图或对象视图、序列、存储过程、函数或包、物化视图、Java 类模式对象、用户定义的对象类型、同义词

84.可以使用什么来引用另一个用户拥有的表?

  1. INDEX
  2. TABLE
  3. SYNONYMS
  4. SEQUENCES

答案:C。同义词是数据库对象的替代名称或别名。

85.以下哪个是 非唯一索引 的示例?

  1. PRIMARY KEY
  2. UNIQUE KEY
  3. FOREIGN KEY
  4. 以上都不是

答案:C。

86.以下哪个是索引的主要和基本类型?

  1. 位图
  2. B 树
  3. 唯一
  4. 非唯一

答案:A, B。B 树(平衡树)索引是 Oracle 中最常用的索引。您可以使用基本的 CREATE INDEX 语句创建此类型的索引。位图索引在结构和用途上与 B 树索引有所不同。此索引对于改进对具有低选择性(低基数或少量不同值)的列的查询非常有用。

87.您需要通过在 EMPLOYEES 表的 FIRST_NAME 上创建索引来加快查询速度。可以使用以下哪个语句?(假设表结构如所示)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1. CREATE INDEX emp_first_name_idx 
    ON employees (first_name); 
  2. CREATE INDEX emp_first_name_idx 
    ON employees first_name; 
  3. ALTER INDEX emp_first_name_idx 
    ON employees (first_name); 
  4. 以上都不是

答案:A。

88.在创建索引时,UNIQUE 关键字的作用是什么?

  1. 它指定创建索引的列的值必须唯一
  2. 创建索引时不能使用 UNIQUE 关键字
  3. 它指定创建的索引只能被一个表使用
  4. 以上都不是

答案:A。当在列上定义 PRIMARY KEY 或 UNIQUE 约束时,通常会自动创建唯一索引。也可以通过在 CREATE INDEX 语句中包含 UNIQUE 关键字来显式创建唯一索引。

89.当您在创建索引时指定关键字 BITMAP 时会发生什么?

  1. 它为每个不同的键创建一个带有位图的索引。
  2. 它不会分别为每一行创建索引
  3. A 和 B
  4. 以上都不是

答案:C。

90.您编写的查询预计将检索少于 2% 到 4% 的行。为了实现此类查询的查询性能,可以对相关表应用以下哪些方法?(选择最佳答案)

  1. 索引
  2. UNION 集合运算符
  3. MINUS 集合运算符
  4. 以上都不是

答案:A. 索引是实现查询性能的最佳方法。可以使用索引扫描减少和简化大量的IO操作。

91. 在哪些情况下索引有用?

  1. 如果表很大
  2. 如果列的值较少
  3. 如果列包含大量NULL值
  4. 如果列的值范围很广

答案:C, D。

92. EMPLOYEES表经常更新。何时可以在此表上创建索引?(选择最合适的答案)

  1. 如果表经常更新,则不应创建索引
  2. 应在创建表时创建索引
  3. A 和 B 都不是
  4. 以上都不是

答案:A. 对带有索引的表进行频繁或批量DML操作会增加维护索引段的开销,这可能会影响DML操作的性能。

93. 考虑以下查询并回答以下问题。假设EMPLOYEES表的EMPLOYEE_ID、DEPARTMENT_ID和FIRST_NAME列已建立索引。(假设表结构如给定)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT first_name, last_name 
FROM employees 
WHERE comm IS NULL; 

如果EMPLOYEES表中有100万行,现有索引在这种情况下是否有帮助?

  1. 可能会有帮助
  2. 以上都不是

答案:B. 当查询谓词不包含已创建索引的列时,不会使用索引。

94. 以下哪项将删除索引?

  1. DELETE FROM index_name; 
  2. DROP INDEX index_name; 
  3. DROP INDEX;
  4. 以上都不是

答案:B. 您必须具有DROP ANY INDEX权限才能删除索引。

广告