web-dev-qa-db-ja.com

Oracleのマテリアライズドビューを更新する方法

Iamは、次を使用してマテリアライズドビューを更新しようとしています。

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')

しかし、無効なSQLステートメントをスローしています。

次に、次のようなストアドプロシージャを作成しました。

CREATE OR REPLACE 
PROCEDURE MAT_VIEW_FOO_TBL 
IS
BEGIN
   DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
END MAT_VIEW_FOO_TBL IS;

この手順は正常に作成されましたが、この手順を呼び出すときに

MAT_VIEW_FOO_TBL;

再びエラーがスローされます。

この問題の解決策をご提案ください。

ありがとう、Srinivas

53
Srinivas

これを試して:

DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f'); 

最初パラメーターはmat_viewの名前であり、refreshのタイプを定義します。 fは高速リフレッシュを示します。しかし、このことを覚えておいてくださいオーバーライド他の更新タイミングオプション。

44
fahim ashraf

このスクリプトを実行して、マテリアライズドビューのデータを更新します。

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
52
Waqas Ali

ゲームに少し遅れましたが、この質問の元の構文を機能させる方法を見つけました(Oracle 11gを使用しています)

**最初にMVのスキーマに切り替えます**

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW');

または、いくつかのオプションを追加できます。

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4);

これは実際に私のために機能し、並列処理オプションを追加すると、実行が約2.5倍速くなりました。

詳細はこちら: マテリアライズドビューを並行して更新する方法

11
Sonic Soul

マテリアライズドビューは、次のように完全に更新できます。

EXECUTE  
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');
7
Yasir Meraj

最適なオプションは「?」を使用することですメソッドの引数。このようにして、DBMS_MVIEWは最適な更新方法を選択するため、最速の更新が自動的に実行されます。 、そして実際に完全な更新が必要なときにmethod => 'f'のようなものを試しても失敗しません。 :-)

sQL * Plusプロンプトから:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
5
mike

SQL Developerを使用している場合は、dbms_viewを小文字にする必要があります。まだコードからプロシージャを呼び出していませんが、残りはうまくコンパイルされました。

CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS 
BEGIN
  dbms_mview.refresh('v_materialized_foo_tbl');
END;
4
Will Lovett

以下の構文を使用してみてください。

一般的な構文:

begin
dbms_mview.refresh('mview_name');
end;

例:

begin
dbms_mview.refresh('inv_trans');
end;

上記がお役に立てば幸いです。

1
Vikash Prasad

EXECUTE dbms_mview.refresh( 'view name'、 'cf');

0
issam