Я использую 4 материализованных представления на моем oracle 12c - все они обновляются вручную с помощью вызова хранимой процедуры.
Все представления включают поиск переменной контекста в предложении where, включая временной интервал (от и до).
Контекст был создан
CREATE OR REPLACE CONTEXT myContext using prepare_export;
Никакое представление не имеет никакого отношения к другим представлениям, кроме использования того же пользовательского контекста, но с разными именами переменных.
Цепочка выполнения (необходимо обновить только одно представление):
execute prepare_export('MyViewName','20180131','20180231');
запись в таблице data_export создается для логирования data_export
INSERT INTO DATA_EXPORT (SOURCE_,EXPORT_TIME_,EXPORT_FROM_,EXPORT_TO_,user_name,user_ip) VALUES (viewName,systimestamp,date_From,date_To,(select user from dual),(select sys_context('userenv','ip_address') from dual));`
заданы контекстные переменные (от: 20180131 до: 20180231)
dbms_session.set_context('myContext',viewName || '_from',date_from); dbms_session.set_context('myContext',viewName || '_to',date_to);
просмотр MyViewName обновляется (атомарное обновление ложно)
dbms_mview.refresh(viewName,'c',atomic_refresh=>FALSE);
запись data_export обновляется с учетом количества (*) последнего обновления
execute immediate 'UPDATE data_export set resultset_size_=' ||viewRowCount ||' where id_ = (select max(id_) from data_export where source_=''' || viewName || ''' group by source_)';
После завершения процедуры все представления становятся недействительными и их необходимо перекомпилировать вручную ...
Есть какая-нибудь помощь?
Спасибо, Джо