3

在我的程序中,我需要访问 Oracle 11g 数据库的模式。我一直在尝试使用这样的查询获取表列表:

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

查询有效,我得到一个表列表。不幸的是,当使用返回的表名查询某些表时,出现以下错误:

ORA-00942: 表或视图不存在

什么可能导致此错误?会不会是特权?

在一个单独的问题中,我也有点困惑是否可能存在两个或同名的表以及如何区分这两者。我需要注意这个吗?

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

4

3 回答 3

6

这可能取决于特权。但这可能是由于表处于不同的模式中,并且没有同义词。如果您使用所有者限定表名,它是否有效?即从 [owner].[table_name] 中选择?

于 2010-09-23T11:39:11.960 回答
3

仅仅因为您有权访问 ALL_TABLES 视图并不意味着您实际上可以选择通过该视图检索的表。您需要在表上进行适当的授权选择来选择它们。

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

于 2010-09-23T11:25:35.217 回答
0

Yes, it is a security feature - if you do not have permission to SELECT from a table, Oracle will normally not even acknowledge to you that it exists (an ordinary user would not be able to see things in select from ALL_ unless that was granted by the DBA).

于 2010-09-23T17:26:21.597 回答