Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 数据库中的视图比较_Oracle_Views_Ddl - Fatal编程技术网

Oracle 数据库中的视图比较

Oracle 数据库中的视图比较,oracle,views,ddl,Oracle,Views,Ddl,我想根据使用此视图的对象来比较视图。 例如,如果某个对象被某个视图使用,并且该对象最近发生了更改,则我希望在该对象发生更改时更新该视图。 我有一些使用DDL时间的建议;有什么想法吗? 谢谢以下查询可能有用。我在这里使用了系统视图dba\u依赖项,所有对象。 Time1通知上次更改引用对象的时间,time2通知上次编译视图的时间 select d.name, d.referenced_owner, d.referenced_name, o1.last_ddl_time time1, o2

我想根据使用此视图的对象来比较视图。 例如,如果某个对象被某个视图使用,并且该对象最近发生了更改,则我希望在该对象发生更改时更新该视图。 我有一些使用DDL时间的建议;有什么想法吗?
谢谢

以下查询可能有用。我在这里使用了系统视图
dba\u依赖项
所有对象
。 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'
测试:

“我想更新视图”是什么意思?视图只是存储的SQL语句,在从中选择之前不会执行这些语句。它们不在任何地方存储数据。您是说如果视图所依赖的任何对象发生更改,您希望重新编译视图吗?
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