【问题标题】:My Oracle view uses a table that doesn't exist, but I can still query it我的 Oracle 视图使用了一个不存在的表,但我仍然可以查询它
【发布时间】:2010-11-04 16:29:05
【问题描述】:

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

视图内容是否缓存在某个地方,从表格仍然存在时开始,或者我只是没有足够努力地寻找表格?

明确一点:我查看了 ALL_TABLES 和 ALL_OBJECTS,但表(或其他任何东西)都没有出现。

【问题讨论】:

  • 视图在您的架构中还是其他架构中?如果是前者,您应该有权访问所有单独的组件。如果是后者,您可能无法看到组件。不过,我会以 ALL_OBJECTS 为起点。
  • 我会查询 DBA_OBJECTS(如果我没有权限,则将查询发送给 DBA)来确定。

标签: sql oracle view


【解决方案1】:

这是很有可能的。在视图上授予选择权限不会在基础表上授予选择权限。这使我可以创建一个视图,该视图公开了我不想让您全部看到的表中的几列。您必须有权访问该表,它才能显示在 ALL_TABLES 视图中。如果它确实是一个表,您应该能够在 DBA_TABLES 视图中找到它(假设您可以访问 DBA_TABLES 视图),它包含所有内容,而不仅仅是您的用户有权访问的表。

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

【讨论】:

  • 我很确定这一定是答案,因为视图属于不同的用户,并且汇总了相当混乱的迁移中的数据。
【解决方案2】:

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

SELECT table_owner, table_name
  FROM all_synonyms
 WHERE table_name = 'MISSING_TABLE';

如果不是同义词,请尝试在 all_tables 字典视图中查找您的表:

SELECT owner, table_name
  FROM all_tables
 WHERE table_name = 'MISSING_TABLE';

【讨论】:

    【解决方案3】:

    这可能是物化视图吗?这是数据的副本,因此即使删除了基表,它也会继续存在。

    【讨论】:

      【解决方案4】:

      检查视图中您找不到的表引用的架构 - 它可能不是当前架构,但当前架构对特定表具有 SELECT 权限(至少)。

      一旦您知道架构,它应该有助于确定表是否实际上是当前架构中的视图。或者它可能是存在于当前架构中的同义词 - 而公共同义词在所有架构中都是相同的,因此您必须检查同义词以查看它指向的位置。

      【讨论】:

      • 能找到视图,就是找不到表。
      • @TomSW:您检查过“缺失的表格”不是视图吗?
      【解决方案5】:

      我会确保你没有通过说来设置它

      Create Table "TableName"
        ("ColumnName" Number(10,0))....
      

      如果您随后尝试使用以下脚本引用这些内容:

      Select ColumnName from TableName....
      

      它不会工作。这是因为 Oracle 采用不带引号的名称(如 TableName)并将它们转换为不存在的 TABLENAME,因为当您使用“TableName”声明它时,您实际上是在说“仅响应具有这种精确大小写的查询,这些查询也包含在 引号中强>”

      所以以下方法会起作用:

      Select "ColumnName" from "TableName"....
      

      但基本上you should never use 区分大小写的定义,因为它们需要引用每个查询。

      改为

      Create Table TableName
        (ColumnName Number(10,0))....
      

      它会响应您在查询时喜欢使用的任何大小写

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多