Oracle - Materialized View混淆(Toad IDE在Tables部分显示MV时是错误的吗?)

时间:2011-05-19 19:25:14

标签: oracle oracle10g toad materialized-views

我对物化视图感到困惑。要么是我使用的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

幕后是Oracle在创建物化视图时创建表格吗?它看起来好像有两个单独的对象,一个物化视图和一个表?有人可以在创建物化视图时解释幕后发生的事情吗? Toad错了还是我误解了什么?

Toad版本:9.6.1.1 甲骨文:10克

1 个答案:

答案 0 :(得分: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