代码之家  ›  专栏  ›  技术社区  ›  James

查询Oracle数据库中的表列表时出现问题:“表或视图不存在”

  •  3
  • James  · 技术社区  · 14 年前

    在我的程序中,我需要访问oracle11g数据库的模式。我一直在尝试使用以下查询获取表列表:

    SELECT t.TABLE_NAME, t.OWNER
    FROM ALL_TABLES t
    WHERE t.DROPPED = 'NO'
    ORDER BY t.TABLE_NAME
    

    ORA-00942:表或视图不存在

    什么会导致这个错误?可能是因为特权吗?

    我用的是Oracle.DataAccess提供程序,以连接到数据库。这是一个远程服务器,不幸的是我对它的访问非常有限。

    3 回复  |  直到 13 年前
        1
  •  6
  •   Hobo    14 年前

    可能是因为特权。但这可能是因为表位于不同的模式中,并且没有同义词。如果您将表名与所有者限定在一起,是否有效?从[owner].[table\u name]中选择?

        2
  •  3
  •   vc 74    14 年前

    仅仅因为您有权访问ALL\ U TABLES视图并不意味着您可以实际选择通过该视图检索的表。您需要在表上选择适当的grant select来选择它们。

    2个表可以有相同的名称,只要它们属于不同的模式(范围实际上比表更广,一个模式不能有两个同名的对象(表、视图…)

        3
  •  0
  •   Gaius    14 年前

    是的,这是一个安全特性—如果您没有从表中选择的权限,Oracle通常甚至不会向您确认它的存在(除非DBA授权,否则普通用户将无法看到SELECT from ALL\中的内容)。