我想根据使用此视图的对象比较视图。 例如,如果一个对象被一个视图使用并且它最近已经改变了,我希望在对象发生变化时更新视图。 我有一些建议使用DDL时间;任何的想法 ? 感谢
答案 0 :(得分:0)
以下查询可能有用。我在这里使用了系统视图dba_dependencies
,all_objects
。
Time1通知上次更改引用对象的时间和time2 - 上次编译视图的时间。
select d.name, d.referenced_owner, d.referenced_name,
o1.last_ddl_time time1, o2.last_ddl_time time2, o2.status
from dba_dependencies d
left join all_objects o1 on o1.owner = d.referenced_owner
and o1.object_name = d.referenced_name
left join all_objects o2 on o2.owner = d.owner
and o2.object_name = d.name
where d.owner = 'SCOTT' and d.type = 'VIEW'
测试:
create table temp as (select dummy col1, dummy col2 from dual);
create view v_temp as select * from temp;
alter table temp drop column col2; -- <- this invalidates view
查询结果:
NAME REF_OWNER REF_NAME TIME1 TIME2 STATUS
-------- --------- -------- ------------------- ------------------- -------
V_TEMP SCOTT TEMP 2015-03-18 12:23:07 2015-03-18 12:22:10 INVALID