我的Oracle视图使用了一个不存在的表,但我仍然可以查询它

Tom*_*mSW 4 sql oracle view

我有一个Oracle视图,它使用我在任何地方都找不到的表.但是,我仍然可以查询视图,我认为这是不可能的.

视图内容是否缓存在某个地方,从表格仍然存在的时候开始,还是我对表格看起来不够努力?

为了清楚起见:我已经查看了ALL_TABLES和ALL_OBJECTS,并且表中(或其他任何内容)都没有出现.

Cra*_*aig 6

这很有可能.在视图上授予select不会在基础表上授予select.这允许我创建一个视图,从表中公开一些我不希望你看到的列.您必须具有对表的访问权限才能在ALL_TABLES视图中显示它.如果它确实是一个表,您应该能够在DBA_TABLES视图中找到它(假设您可以访问DBA_TABLES视图),该视图包含所有内容,而不仅仅是您的用户拥有权限的表.

事实上,ALL_TABLES视图就是这种情况的完美例子.我打赌你也找不到该视图中使用的表,因为你可能没有它所基于的SYS表的权限(例如SYS.user $,SYS.obj $等).


DCo*_*kie 5

还要检查"缺失"表是否实际上是同义词:

SELECT table_owner, table_name
  FROM all_synonyms
 WHERE table_name = 'MISSING_TABLE';
Run Code Online (Sandbox Code Playgroud)

如果它不是同义词,请尝试查看表的all_tables字典视图:

SELECT owner, table_name
  FROM all_tables
 WHERE table_name = 'MISSING_TABLE';
Run Code Online (Sandbox Code Playgroud)