数据库中的视图比较

Posted

技术标签:

【中文标题】数据库中的视图比较【英文标题】:views comparison in Database 【发布时间】:2015-03-18 10:43:34 【问题描述】:

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

【问题讨论】:

“我想要更新视图”是什么意思?视图只是存储的 SQL 语句,在 SELECTed from 之前不会执行。他们不在任何地方存储数据。如果视图所依赖的任何对象发生更改,您是说要重新编译视图吗? 【参考方案1】:

以下查询可能有用。我在这里使用了系统视图dba_dependenciesall_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

【讨论】:

以上是关于数据库中的视图比较的主要内容,如果未能解决你的问题,请参考以下文章

使用 HSQLDB 比较 Openoffice 数据库中的日期

sql语句联合查询 与 视图想比较的话,那个效率快,为啥。

简述frameboundscenter

我在oracle数据库中的一个视图中添加了一行,提示添加成功,但在视图中查不到,是啥原因?

Sql Server2005数据库怎么查看视图里的字段。

核心数据:如何显示 fetchrequest 的结果以计算表格视图单元格中的值