2011-05-19 27 views
5

我對物化視圖感到困惑。要麼是我使用的Toad IDE會讓我感到困惑,要麼是我對MV不夠了解。Oracle - 物化視圖混淆(Toad IDE在表格部分顯示MV時出錯?)

我創建Oracle中的物化視圖通過這樣的事情....

CREATE MATERIALIZED VIEW TESTRESULT 
NOCACHE 
LOGGING 
NOCOMPRESS 
NOPARALLEL 
BUILD IMMEDIATE 
REFRESH FORCE ON DEMAND 
WITH PRIMARY KEY 
AS 
SELECT ... 
FROM tables... 

我會想到的是,物化視圖將被創建,並從查詢返回的數據填充。好吧,沒什麼大不了的。

我對此感到困惑的是爲什麼我的Toad IDE在表格部分顯示'TESTRESULT'表。它甚至還有我可以查看的「創建表格腳本」。 enter image description here

但我也看到我的物化視圖下的'物化視圖'部分。 enter image description here

幕後是甲骨文在創建物化視圖時創建表嗎?它看起來好像有兩個獨立的對象,一個物化視圖和一個表格?有人可以在創建物化視圖時解釋幕後發生的情況嗎?蟾蜍是錯誤的還是我誤解了一些東西?

蟾蜍版本:9.6.1.1 甲骨文:10克

回答

9

是,在幕後,Oracle會創建兩個對象,一個表,其中的結果實際上物化和具有所有的元數據(查詢物化視圖,屬性等)。它與創建唯一約束時發生的情況非常相似 - Oracle創建一個與約束具有相同名稱的唯一索引以實際執行約束,然後它自己創建一個約束。如果您在預構建的表上創建實例化視圖,則可以爲表和實例化視圖創建不同的名稱,就像您可以創建使用具有不同名稱的現有索引的約束一樣。

SQL> select object_name, object_type 
    2 from user_objects 
    3 
SQL> ed 
Wrote file afiedt.buf 

    1 select object_name, object_type 
    2 from user_objects 
    3* where object_name = 'MV_EMP' 
    4/

no rows selected 

SQL> create materialized view mv_emp 
    2 as 
    3 select * 
    4 from emp; 

Materialized view created. 

SQL> column object_name format a30; 
SQL> select object_name, object_type 
    2 from user_objects 
    3 where object_name = 'MV_EMP'; 

OBJECT_NAME     OBJECT_TYPE 
------------------------------ ------------------- 
MV_EMP       TABLE 
MV_EMP       MATERIALIZED VIEW 
+0

這樣做很有意義,謝謝 – contactmatt 2011-05-19 19:58:54