web-dev-qa-db-ja.com

毎日レコードを更新するマテリアライズドビューを作成します

現在、REFRESH ON DEMANDを使用して作成したマテリアライズドビューなので、この場合、以下のコマンドを使用してMVを明示的に更新する必要があります。

BEGIN DBMS_MVIEW.REFRESH('MV_DATA'); END; 

しかし今、私はこのMVを毎日更新する必要があるので、誰かがこれを書くのを手伝ってくれませんか。明示的なジョブを作成するか、MV自体でCOMPLETE/FAST REFRESHステートメントを使用して、このMVを更新できることを確認しました。

前もって感謝します!

9
cool_taps

STARTWITH句とNEXT句を使用してマテリアライズドビューを作成する必要があります

create materialized view <mview_name>
refresh on demand 
start with sysdate next sysdate + 1
as select ............

したがって、mviewを毎日更新する場合は、オンデマンドで更新を維持し、次の更新時間をsysdate + 1に設定する必要があります。ただし、任意の間隔を設定できます。

これを行うと、マテリアライズドビューが作成され、24時間ごとにmviewを更新するジョブがOracleに設定されます(sysdate + 1)

その方法の詳細については、 このリンク をたどってください。

14
San

12 AMで更新するだけのSQLクエリが必要な場合は、以下のクエリで十分です。

CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDIATE 
REFRESH FAST START WITH (SYSDATE) NEXT (SYSDATE + 1) WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM <YOUR TABLE>

6 AM付近で更新する必要がある場合は、以下のスクリプトを使用してください。追加のロジックは+ 6 / 24として表示されます。 4 AMに変更する必要がある場合は、ロジックを+ 4 / 24として使用してください。

CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDEATE 
REFRESH FAST START WITH (SYSDATE) NEXT (SYSDATE + 1) + 6 / 24 WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM <YOUR TABLE>
2
Sarath Avanavu

特定の時間(午前6時)に実行されるようにサラスのスクリプトを編集しました。

CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDEATE 
REFRESH FAST START WITH (SYSDATE) NEXT (TRUNC(SYSDATE) + 1) + 6 / 24 WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM YOURTABLE
0
Dominic Pajares