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許可權才能刪除索引。

廣告
© . All rights reserved.