0

異なるユーザー スキーマの複数のテーブルに基づいて構築されたビューがあります。現在ログインしているユーザーのおかげで、彼は別のスキーマからテーブルを見ることができます。ビューが作成されると、ユーザーは異なるスキーマから同じテーブルにアクセスできるため、テーブル名があいまいになります。ビューの作成中に現在のユーザー スキーマのテーブルを使用するように指定する方法はありますか? ビュー定義のテーブルの 1 つに対してそれを行うことができますが、他のテーブルは任意のスキーマから選択できますか?

4

2 に答える 2

2

「ビューが作成されると、ユーザーが異なるスキーマから同じテーブルにアクセスできるため、テーブル名があいまいになります」

Oracleにとってはあいまいではありません。

ビューはスキーマ SCHEMA_1 に存在します。そのビューがオブジェクト TABLE_A を参照する場合、Oracle はまず SCHEMA_1 でオブジェクト TABLE_A を検索します。テーブルが見つかった場合は、それを使用します。SYNONYM が見つかった場合は、その類義語が指すものは何でも使用します。SCHEMA_1 に何もない場合、TABLE_A の PUBLIC SYNONYM を探し、それが指すものを使用します。

SYNONYMS は、他のシノニム、ビュー、またはテーブルを指すことができます。

USER_DEPENDENCIES をクエリして、ビューが実際にどのオブジェクトに基づいているかを確認できます。

SCHEMA_2 から照会された場合は SCHEMA_2 の TABLE_A を使用し、SCHEMA_3 から照会された場合は SCHEMA_3 で別の TABLE_A を使用するビューを SCHEMA_1 に持つことはできません。

于 2010-01-14T02:38:56.753 に答える
1

スキーマ名のプレフィックスを付けることで、(正しい権限で) スキーマにアクセスできるはずです。

schemaname.tablename

あなたの質問を正しく理解できたことを願っています。

于 2010-01-13T19:37:01.927 に答える