Быстрое обновление материализованного представления на основе не быстрого обновления

Я обнаружил, что могу иметь две таблицы и создать fast refresh on commitmaterialized view на основе этих таблиц присоединились.

Однако я хотел бы сделать fast refresh on commit материализованное представление, основанное на следующем:

(1) Стол, к которому присоединяются
(2) А complete refresh on demand материализованное представление, которое само основано на других взглядах (то есть обычных взглядах).

Когда я пытаюсь это сделать, я получаю ошибку ORA-12053, который говорил о записях в from пункт, имеющий зависимости друг от друга, даже если они явно не.

Я могу обойти это, заменив (2) обычной таблицей и просто выполняя массовую вставку в эту таблицу вместо обновления материализованного представления. Тем не менее, я бы предпочел не делать этого, если не нужно.

Я попытаюсь поработать над минимальным примером, который иллюстрирует ошибку, но если бы вы могли дать мне представление о том, возможно ли то, что я хочу сделать (желательно на примере), или нет, это было бы здорово.

2 ответа

Решение

Следуйте этим фактам, чтобы понять ошибку.

  1. Fast Refresh on Commit материализованное представление обновляется строка за строкой на основе изменений, внесенных в базовые таблицы.
  2. Refresh Complete on Demand материализованное представление обновляется путем усечения таблицы назначения и повторной вставки всего.
  3. Обновление верхнего материализованного представления будет невозможно, потому что oracle не может отследить изменения в таблице 2 (то есть, обновить полное материализованное представление.)

Существуют ограничения на вложенные материализованные представления. Я описал их в этом посте. ORA-12053 является результатом несоответствия первому ограничению вложенных MV. Делать базовый MV более сложным (объединять, объединять или объединять все MV) - это решение.

С Уважением,
Роб.

Другие вопросы по тегам