私はデータベースリンクを介してアクセスできるビューを持っています:
SQL> select count(*) from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;
COUNT(*)
--------
110
シノニムを介してリモートビューを作成して正常にクエリできます。
SQL> create synonym REMOTE_VIEW for REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;
Synonym created
SQL> select count(*) from REMOTE_VIEW;
COUNT(*)
--------
110
ただし、シノニムを使用してマテリアライズドビューを作成しようとすると失敗します。
SQL> create materialized view REMOTE_MV
build immediate
refresh complete
next sysdate+1
with ROWID
as
select * from REMOTE_VIEW;
ORA-00942: table or view does not exist
シノニムなしのマテリアライズドビューの作成は成功します。
SQL> create materialized view REMOTE_MV
build immediate
refresh complete
next sysdate+1
with ROWID
as
select * from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;
Materialized view created
同義語の使用が失敗する理由はありますか?理想的には、同義語を使用して、データベースリンクからマテリアライズドビューを分離します。データベースリンクは環境によって異なる可能性があるため、マテリアライズドビューのクエリが同じであることを確認したいと思います。
それを理解することができました!シノニムにマテリアライズドビューを作成できますが、問題の原因となっているのは、エディションベースの再定義(EBR)を理解していないことでした。
デフォルトのプライベートシノニムはEDITIONABLEです。
[EDITIONABLE |選択不可]
これらの句を使用して、スキーマ内のスキーマオブジェクトタイプSYNONYMで編集が有効になっている場合に、シノニムが編集されたオブジェクトか編集されていないオブジェクトかを指定します。 プライベートシノニムの場合、デフォルトはEDITIONABLEです。パブリックシノニムの場合、デフォルトはNONEDITIONABLEです。
ただし、マテリアライズドビューは非エディションオブジェクトです:
24.1.1.2.1マテリアライズドビュー
マテリアライズドビューは、評価版を指定できる非エディションオブジェクトであり、それにより、エディション化されたオブジェクトに依存することができます。
CREATE MATERIALIZED VIEW [schema。] materialized_view other_clauses [Evaluation_edition_clause] [query_rewrite_clause] ASサブクエリ
ここでEvaluation_edition_clauseは次のとおりです。
{現在の版を使用して評価|エディションエディション| NULLエディション}
CURRENT EDITIONは、DDLステートメントが実行されるエディションです。 NULL EDITIONを指定することは、それを含む句を省略することと同じです。 evaluation_edition_clauseを省略した場合、編集されたオブジェクトは名前解決中に非表示になります。
そのため、問題を解決するために2つのオプションを正常にテストしました。
CREATE MATERIALIZED VIEWステートメントを使用して、マテリアライズドビューを作成します。マテリアライズドビューは、クエリの結果を含むデータベースオブジェクトです。クエリのFROM句は、テーブル、ビュー、およびその他のマテリアライズドビューに名前を付けることができます。 その他
シノニムからマテリアライズドビューを作成することはできません。なぜそうしたいのかはわかりませんが、実例としてマテリアライズドビューを作成しています。