web-dev-qa-db-ja.com

Oracle 12c-マテリアライズドビューを作成すると、ORA-00942が発生する

私はデータベースリンクを介してアクセスできるビューを持っています:

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

同義語の使用が失敗する理由はありますか?理想的には、同義語を使用して、データベースリンクからマテリアライズドビューを分離します。データベースリンクは環境によって異なる可能性があるため、マテリアライズドビューのクエリが同じであることを確認したいと思います。

4
user109164

それを理解することができました!シノニムにマテリアライズドビューを作成できますが、問題の原因となっているのは、エディションベースの再定義(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つのオプションを正常にテストしました。

  • オプション1-シノニムをNONEDITIONABLEにします。その場合、マテリアライズドビューに表示されますOR
  • オプション2-マテリアライズドビューでEvaluation_edition_clauseを指定します。
1
user109164

CREATE MATERIALIZED VIEWステートメントを使用して、マテリアライズドビューを作成します。マテリアライズドビューは、クエリの結果を含むデータベースオブジェクトです。クエリのFROM句は、テーブル、ビュー、およびその他のマテリアライズドビューに名前を付けることができます。 その他

シノニムからマテリアライズドビューを作成することはできません。なぜそうしたいのかはわかりませんが、実例としてマテリアライズドビューを作成しています。

2
JSapkota