13

我想执行一个查询,该查询从与数据库连接中指定的模式不同的模式中选择数据(相同的 Oracle 服务器、相同的数据库、不同的模式)

我有一个与 Oracle 服务器通信的 python 应用程序。它打开到数据库(服务器/模式)A 的连接,并对该数据库内的表执行选择查询。

我尝试了以下方法:

select .... 
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...

但我得到:

ORA-00942: table or view does not exist

我也试过用括号括起来架构名称:

from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es

我得到:

ORA-00903: invalid table name

查询是使用 Django 应用程序内部的 cx_Oracle python 模块执行的。

可以这样做还是应该建立一个新的数据库连接?

4

3 回答 3

26

您用来连接数据库的用户A(本例中的用户)是否有权SELECT访问PCT架构中的对象?假设A没有此访问权限,您将收到“表或视图不存在”错误。

最有可能的是,您需要您的 DBA 授予用户A访问PCT您需要的架构中任何表的权限。就像是

GRANT SELECT ON pct.pi_int
   TO a;

完成后,您应该能够使用您最初在问题中演示PCT的语法来引用架构中的对象。pct.pi_int括号语法方法将不起作用。

于 2012-12-04T18:15:15.007 回答
5

除了授予之外,您还可以尝试创建同义词。它将避免每次都指定表所有者模式的需要。

从连接模式:

CREATE SYNONYM pi_int FOR pct.pi_int;

然后你可以查询pi_int为:

SELECT * FROM pi_int;
于 2012-12-05T03:50:09.297 回答
0

根据您用于连接数据库的架构/帐户,我怀疑您缺少对用于连接数据库的帐户的授权。

在数据库中连接为 PCT 帐户,然后授予您正在使用的帐户对表的选择访问权限。

grant select on pi_int to Account_used_to_connect
于 2012-12-04T18:16:16.350 回答