从oracle中的另一个模式中选择数据

mar*_*nov 11 sql oracle cx-oracle

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

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

我尝试过以下方法:

select .... 
from pct.pi_int, pct.pi_ma, pct.pi_es
where ...
Run Code Online (Sandbox Code Playgroud)

但我得到:

ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

我还尝试用括号括起架构名称:

from [PCT].pi_int, [PCT].pi_ma, [PCAT].pi_es
Run Code Online (Sandbox Code Playgroud)

我明白了:

ORA-00903: invalid table name
Run Code Online (Sandbox Code Playgroud)

使用来自Django应用程序内部的cx_Oracle python模块执行查询.

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

Jus*_*ave 23

您用来连接数据库的用户A(本例中的用户)是否SELECT可以访问PCT模式中的对象?假设A没有此访问权限,您将得到"表或视图不存在"错误.

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

GRANT SELECT ON pct.pi_int
   TO a;
Run Code Online (Sandbox Code Playgroud)

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


小智 5

除了拨款,您还可以尝试创建同义词.它将避免每次都指定表所有者架构.

从连接架构:

CREATE SYNONYM pi_int FOR pct.pi_int;
Run Code Online (Sandbox Code Playgroud)

然后你可以查询pi_int为:

SELECT * FROM pi_int;
Run Code Online (Sandbox Code Playgroud)