首页 文章

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

提问于
浏览
9

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

我有一个python应用程序与Oracle服务器通信 . 它打开与数据库(服务器/模式)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模块执行查询 .

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

3 回答

  • 21

    您用于连接数据库的用户(在此示例中为用户 A )是否对 PCT 架构中的对象具有 SELECT 访问权限?假设 A 没有此访问权限,您将收到"table or view does not exist"错误 .

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

    GRANT SELECT ON pct.pi_int
       TO a;
    

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

  • 0

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

    从连接架构:

    CREATE SYNONYM pi_int FOR pct.pi_int;
    

    然后你可以查询 pi_int 如下:

    SELECT * FROM pi_int;
    
  • 5

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

    在数据库中以PCT帐户身份连接,然后授予您正在使用该帐户的select访问权限的帐户 .

    grant select on pi_int to Account_used_to_connect
    

相关问题