Oracle 11g系列:檢視

libingql發表於2014-03-13

  檢視是資料庫中特有的物件,檢視用於儲存查詢,但不會儲存資料(物化檢視除外)。這是檢視和資料表的重要區別。Oracle中有4種檢視:關係檢視、內嵌檢視、物件檢視和物化檢視。

  1、關係檢視

  1>、建立檢視

CREATE VIEW VW_EMPLOYEE
AS
       SELECT EMP_ID,EMP_NAME FROM EMPLOYEES

  2>、檢視檢視定義

SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME = 'VW_EMPLOYEE'

  3>、檢視檢視內容

SELECT * FROM VW_EMPLOYEE

  4>、修改檢視

CREATE OR REPLACE VIEW VW_EMPLOYEE
AS
       SELECT EMP_ID,EMP_NAME FROM EMPLOYEES

  5>、刪除檢視

DROP VIEW VW_EMPLOYEE

  6>、編譯檢視

ALTER VIEW VW_EMPLOYEE COMPILE

  2、內嵌檢視

  內嵌檢視也是檢視,只是不會使用CREATE VIEW進行顯示建立。一般情況下,被巢狀在查詢語句中使用,因此稱為內嵌檢視。其功能類似於子查詢。

SELECT * FROM ( SELECT EMP_ID,EMP_NAME FROM EMPLOYEES ) WHERE ROWNUM <= 3

   3、物件檢視

  物件檢視以物件的方式進行資料儲存,是對物件的查詢。物件檢視是基於物件型別來建立的,因此,建立物件檢視之前需要先建立物件型別。

  1>、建立物件型別

CREATE TYPE EMPLOYEE IS OBJECT
( 
       EMP_ID NUMBER,
       EMP_NAME VARCHAR2(20),
       SALARY NUMVER
)

  CREATE TYPE用於建立新的型別,EMPLOYEE指定了新型別的名稱,IS OBJECT表示型別為一個物件,( EMP_ID NUMBER, EMP_NAME VARCHAR2(20),SALARY NUMVER )為物件型別中各屬性的具體定義。

  2>、建立物件檢視

CREATE OR REPLACE VIEW OV_EMPLOYEES
       OF EMPLOYEE
       WITH OBJECT OID(EMP_ID)
AS
     SELECT EMPLOYEE_ID,EMPLOYEE_NAME SALARY FROM EMPLOYEES

  CREATE OR REPLACE VIEW用於建立或者替換一個檢視;OV_EMPLOYEES標識了新檢視的名稱,OV字首表示該檢視是一個物件檢視;OF EMPLOYEE表示新檢視是基於物件型別EMPLOYEE;WITH OBJECT OID用於標識物件中的主鍵,該主鍵是EMP_ID屬性。

  3>、檢視物件檢視

DESC OV_EMPLOYEES
SELECT VIEW_NAME,VIEW_TYPE,OID_TEXT
FROM USER_VIEWS
WHERE VIEW_NAME = 'OV_EMPLOYEES'

  4>、查詢物件檢視

SELECT * FROM OV_EMPLOYEES

  4、物化檢視

  前面三種檢視:關係檢視、內嵌檢視和物件檢視,實際都是通過定製查詢並利用查詢定義來獲取資料。三種檢視都不會直接儲存資料,每次操作時,都會進行編譯。物化檢視儲存實際資料,會佔用一定的資料庫空間。其更接近於臨時表,但不像臨時表那樣在某個特定的時機會刪除資料。物化檢視中的資料是可重用的,經常應用於讀取頻繁的場合。

  物化檢視對於大資料表的處理顯得尤為重要。為了統計一個擁有百萬級記錄的資料表的總和及平均值問題,將耗費大量資料庫資源和時間。可以通過物化檢視進行改善,對錶進行一次統計,並將統計結果儲存在物化檢視中,以後每次直接查詢該檢視即可。但是物化檢視並不適合統計更新頻繁的資料,因為每次的更新都連帶更新物化檢視,所付出的代價很大。

  1>、建立物化檢視

CREATE MATERIALIZED VIEW MV_MONTHLY_SALES
       BUILD IMMEDIATE
       REFRESH ON COMMIT
       ENABLE QUERY REWRITE
AS
       SELECT SALE_MONTH,SUM(PRICE * QUANTITY)
       FROM SALES_ORDERS
       GROUP BY SALE_MONTH

  CREATE MATERIALIZED VIEW用於建立物化檢視,物化檢視沒有REPLACE選項;BUILD IMMEDIATE要求Oracle立即編譯檢視;REFRESH ON COMMIT要求Oracle資料庫一旦基礎表的修改被提交,應自動更新檢視,以便保持檢視的資料和基礎表一致;ENABLE QUERY REWRITE表示啟用查詢重新功能。

  2>、查詢物化檢視

SELECT * FROM MV_MONTHLY_SALES

  3>、檢視物化檢視

SELECT MVIEW_NAME,QUERY FROM USER_VIEWS WHERE MVIEW_NAME = 'MV_MONTHLY_SALES'

  4>、刪除物化檢視

DROP MATERIALIZED VIEW MV_MONTHLY_SALES

相關文章