如何知道创建的视图是否有效

时间:2014-11-17 07:19:09

标签: oracle sqlplus

我是新的db。

假设我已经用武力创建了一个视图。

那么如何才能知道创建的视图是否无效?

我是说有什么疑问可以让我了解视图的有效性状态吗?

感谢。

4 个答案:

答案 0 :(得分:3)

您可以使用Oracle词典视图user_objects

select object_name, status from user_objects 
where object_type = 'VIEW' and object_name = 'YOUR_VIEW';

如果视图所基于的表因任何原因而被更改,则可能必须重新编译该视图。例如,如果更改了表的结构,例如更改了列的数据类型,或者可能是从表中删除了一列 - 使用的列 通过视图 - 然后它可能会将视图的状态更改为“INVALID”。

另请注意,有“所有对象”视图的版本:

USER_OBJECTS - 当前用户拥有的所有对象;
ALL_OBJECTS - 当前用户拥有任何权限的所有对象;
DBA_OBJECTS - 所有数据库对象(您需要特殊权限才能访问此视图)

ALL_和DBA_版本有一个包含对象所有者的附加列OWNER

这些“命名规则”适用于不同的Oracle字典视图:[USER_ | ALL_ | DBA_] [INDEXES |表格|观点|等]

答案 1 :(得分:1)

也许这会有所帮助:

SELECT object_name,
       status
  FROM user_objects
 WHERE object_type = 'VIEW';

或(对于所有模式中的视图)

SELECT owner,
       object_name,
       status
  FROM all_objects
 WHERE object_type = 'VIEW';

答案 2 :(得分:0)

除了检查词典中新视图的状态外,您还可以:

 select 1 from OWNER.MY_NEWLY_CREATED_VIEW;

 select count(*) from OWNER.MY_NEWLY_CREATED_VIEW;

无论您对新观点的陈述如何,根据您的反馈,您知道它是否有效。

答案 3 :(得分:0)

Oracle文档包括以下内容,以作为更新或查找视图是否无效的方法:

重新编译视图,例如customer_ro通过以下语句:

ALTER VIEW customer_ro 编译; 如果Oracle Database在重新编译customer_ro时没有遇到编译错误,则customer_ro变为有效。如果重新编译导致编译错误,则数据库返回错误,customer_ro保持无效。