我是新的db。
假设我已经用武力创建了一个视图。
那么如何才能知道创建的视图是否无效?
我是说有什么疑问可以让我了解视图的有效性状态吗?
感谢。
答案 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保持无效。