13

DB接続で指定したスキーマとは異なるスキーマ(同じ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ない場合、「テーブルまたはビューが存在しません」というエラーが発生します。

ほとんどの場合、必要なスキーマA内のテーブルへのアクセス権をDBA に付与してもらう必要があります。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 に答える