異なるユーザー スキーマの複数のテーブルに基づいて構築されたビューがあります。現在ログインしているユーザーのおかげで、彼は別のスキーマからテーブルを見ることができます。ビューが作成されると、ユーザーは異なるスキーマから同じテーブルにアクセスできるため、テーブル名があいまいになります。ビューの作成中に現在のユーザー スキーマのテーブルを使用するように指定する方法はありますか? ビュー定義のテーブルの 1 つに対してそれを行うことができますが、他のテーブルは任意のスキーマから選択できますか?
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 に持つことはできません。
スキーマ名のプレフィックスを付けることで、(正しい権限で) スキーマにアクセスできるはずです。
schemaname.tablename
あなたの質問を正しく理解できたことを願っています。