5

根据从 system_privilege_map 中选择名称系统已被授予:

SELECT ANY TABLE

...以及许多其他 * 任何表格。

平淡无奇

select * from the_table;
select * from the_table;

...网给定的响应:

第 1 行出现错误:ORA-00942:表或视图不存在

我可以以该用户身份登录并运行相同的命令。

我假设我应该能够针对一般用户的数据库表运行查询(在本例中为选择)。我的假设是否正确,如果是,我该怎么做?

4

3 回答 3

9

正如前面的回复所说,您可以在对象名称前加上模式名称:

SELECT * FROM schema_name.the_table;

或者您可以使用同义词(私有或公共):

CREATE (PUBLIC) SYNONYM the_table FOR schema_name.the_table;

或者,您可以发出 alter session 命令将默认模式设置为您想要的模式:

ALTER SESSION SET current_schema=schema_name;

请注意,这只是设置默认模式,相当于在所有(非限定)对象名称前加上schema_name. 您仍然可以使用不同的模式名称为对象添加前缀,以从另一个模式访问对象。使用SET current_schema不会影响您的权限:您仍然拥有登录用户的权限,而不是您设置的架构。

于 2008-10-24T13:33:38.743 回答
7

如果 the_table 归用户“some_user”所有,则:

select * from some_user.the_table;
于 2008-09-23T17:01:33.337 回答
4

你需要做:

SELECT * FROM schema_name.the_table;

或者使用同义词...

CREATE SYNONYM the_table FOR schema_name.the_table;
于 2008-09-23T17:01:40.573 回答