作为Sqlplus中的System,如何查询其他用户的表?

时间:2008-09-23 17:00:10

标签: sql oracle sqlplus ora-00942

根据system_privilege_map中的select name,系统已被授予:

SELECT ANY TABLE

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

明白地运行

select * from the_table;
select * from the_table;

...获得给定的回复:

  

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

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

我正在运行假设我应该能够运行查询(在这种情况下选择)agaisnt一般用户的数据库表。我的假设是否正确,如果是,我该怎么做?

3 个答案:

答案 0 :(得分:8)

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

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不会影响您的权限:您仍然拥有您登录的用户的权限,而不是您设置的架构。

答案 1 :(得分:7)

如果the_table由用户“some_user”拥有,则:

select * from some_user.the_table;

答案 2 :(得分:4)

你需要这样做:

SELECT * FROM schema_name.the_table;

或使用SYNONYMs ......

CREATE SYNONYM the_table FOR schema_name.the_table;