Oracle - путаница с материализованным представлением (неправильна ли IDE Toad при отображении MV в разделе таблиц?) - PullRequest
5 голосов
/ 19 мая 2011

Я запутался в материализованных взглядах. Либо я использую 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...

Я ожидаю, что материализованное представление будет создано и заполнено данными, возвращенными из запроса. Ладно, ничего страшного.

Что меня смущает, так это то, почему моя IDE Toad показывает таблицу 'TESTRESULT' в разделе таблиц. У него даже есть «Создать табличный скрипт», на который я могу посмотреть. enter image description here

Но я также вижу свое материализованное представление в разделе «Материализованное представление». enter image description here

За кулисами Oracle создает таблицу, когда я создаю материализованное представление? Похоже, есть два отдельных объекта, материализованное представление и таблица? Может ли кто-нибудь объяснить, что здесь происходит за кулисами при создании материализованного представления? Жаба не права или я что-то неправильно понимаю?

Жаба версия: 9.6.1.1 Oracle: 10 г

1 Ответ

9 голосов
/ 19 мая 2011

Да, за кулисами 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...