Есть запрос, в котором некоторые таблицы объединены друг с другом. Из-за производительности и времени отклика на нем создается материализованное представление с fast refresh on commit
, например:
create materialized view mat_calc
refresh fast on commit
as
select po.title as post_title
po.rowid as post_rowid
c.title as comment_title,
c.rowid as comment_rowid,
p.title as person_title,
p.rowid as person_rowidو
cp.rowid as cp_rowid
from post po, comment c, person p,post_comment_person cp
where po.id = cp.post_id
and c.id = cp.comment_id
and p.id = cp.person_id
Как вы знаете, предпосылкой для создания является materialized view log
для каждой из таблиц, которые находятся в этом материализованном представлении, например:
create materialized view log on post;
create materialized view log on comment;
create materialized view log on person;
create materialized view log on post_comment_person;
Как вы снова знаете, the materialized view log
должен обнаружить изменение этих таблиц и применить изменение к материализованному представлению.
Моя проблема в том, что изменение post_comment_person
table only влияет на мое материализованное представление, из-за этого нет необходимости создавать view log
на трех других таблицах; С другой стороны, я хочу, чтобы только post_comment_person
мог обновить не другой, но это невозможно, и возникает следующая ошибка:
ORA-23413: таблица "персона" не имеет материализованного журнала представлений.
Как это можно сделать, потому что смена таблиц person
и post
и comment
не имеет значения.
UPDATE
Еще раз, я хочу отправить изменения в мой MV, включая смену человека, комментарий и публикацию, когда запись вставлена и удалена из post_comment_ person