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
これを試して:
DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f');
最初パラメーターはmat_view
の名前であり、秒はrefresh
のタイプを定義します。 fは高速リフレッシュを示します。しかし、このことを覚えておいてくださいオーバーライド他の更新タイミングオプション。
このスクリプトを実行して、マテリアライズドビューのデータを更新します。
BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
ゲームに少し遅れましたが、この質問の元の構文を機能させる方法を見つけました(Oracle 11gを使用しています)
**最初にMVのスキーマに切り替えます**
EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW');
または、いくつかのオプションを追加できます。
EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4);
これは実際に私のために機能し、並列処理オプションを追加すると、実行が約2.5倍速くなりました。
詳細はこちら: マテリアライズドビューを並行して更新する方法
マテリアライズドビューは、次のように完全に更新できます。
EXECUTE
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');
最適なオプションは「?」を使用することですメソッドの引数。このようにして、DBMS_MVIEWは最適な更新方法を選択するため、最速の更新が自動的に実行されます。 、そして実際に完全な更新が必要なときにmethod => 'f'のようなものを試しても失敗しません。 :-)
sQL * Plusプロンプトから:
EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
SQL Developerを使用している場合は、dbms_viewを小文字にする必要があります。まだコードからプロシージャを呼び出していませんが、残りはうまくコンパイルされました。
CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS
BEGIN
dbms_mview.refresh('v_materialized_foo_tbl');
END;
以下の構文を使用してみてください。
一般的な構文:
begin
dbms_mview.refresh('mview_name');
end;
例:
begin
dbms_mview.refresh('inv_trans');
end;
上記がお役に立てば幸いです。
EXECUTE dbms_mview.refresh( 'view name'、 'cf');