質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

2回答

63097閲覧

他のユーザのテーブルを参照したい

yamaguti

総合スコア185

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

1グッド

1クリップ

投稿2017/10/24 01:21

お世話になっております。

AのユーザからBのユーザのテーブルを参照したいです。
テーブルの定義は同じなのですが、プログラムからSQLを発行してデータベースを参照したいので、クエリは変更したくありません。

なにか用方法はありませんでしょうか。よろしくお願い致します。

Aテーブル 顧客テーブル
Bテーブル 顧客テーブル

pon108👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/10/24 01:26

「ユーザー」というのは「データベース自体のユーザーアカウント」でしょうか。それとも、「同じシステム内で、顧客別にテーブルを立てている」という状況でしょうか。
yamaguti

2017/10/24 01:38

データベースのユーザです。顧客は同じシステム内で同じ画面で参照したいです。
guest

回答2

0

ベストアンサー

・BUSERで
GRANT SELECT ON TABLE1 TO AUSER ;

・AUSERで
CREATE SYNONYM TABLE1 FOR BUSER.TABLE1 ;
で準備OK
SELECT * FROM TABLE1 ;

投稿2017/10/24 03:39

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2017/10/26 13:20 編集

解決済後のコメントなんですが、 これって、AUSERにTABLE1が2つ出来ちゃいますよね。 同じ名前だとテーブル優先になるから、名前変えるしかないし、そうするとSQL変わっちゃいますね。 SQL変えたくないなら、コネクション変えるしかない気がします。
Orlofsky

2017/10/26 13:26

>クエリは変更したくありません。 のでAUSER.TABLE1 は RENAME すると思っていました。 質問を読み直したらRENAME とは書いてなかったです。汗
guest

0

ユーザーが違うということは、Oracle でいえばスキーマが違う、というになります。
つまりあるスキーマから別のスキーマに対してアクセスする、ということになります。

テーブル名指定の「前」にスキーマ名を指定すれば、別スキーマに対してもアクセスできます。
ただしユーザーがアクセス権を持っている(対象オブジェクトへのアクセス権限を GRANT で付与されている)場合に限ります。

ですので、SQL はスキーマ名を含む形に改修する必要があります。
あと DB 側で、利用するユーザが、必要とするテーブルへの SELECT 権限を与えておけばよいです。
※スキーマ全体に付与することもできますが、データの保全を考えるならテーブル単位で細かく指定するほうが良いかもしれません

投稿2017/10/24 02:09

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問