0800時間、1200時間、1800時間、2200時間など、不規則な間隔でマテリアライズドビューを自動的に更新する必要があります。以下に示すように、定期的に更新をスケジュールすることしかできません。
..。
REFRESH FORCE ON DEMAND START WITH sysdate+0 NEXT sysdate+(6/24)
AS Select * from Employee;
0800時間、1200時間、1800時間、2200時間など、不規則な間隔でマテリアライズドビューを自動的に更新する必要があります。以下に示すように、定期的に更新をスケジュールすることしかできません。
..。
REFRESH FORCE ON DEMAND START WITH sysdate+0 NEXT sysdate+(6/24)
AS Select * from Employee;
CASE
にステートメントを含めることができますNEXT
。だからあなたは次のようなことをすることができます
NEXT (CASE WHEN to_number( to_char( sysdate, 'HH24' )) >= 22
THEN trunc(sysdate+1) + interval '8' hour
...
ELSE null
END)
get_next_refresh_time
一般的な正気のために、私は通常、このステートメントを実装する新しい関数(つまり)を作成CASE
し、マテリアライズドビューで関数を参照します。
CREATE OR REPLACE FUNCTION get_next_refresh_time
RETURN DATE
IS
l_dt DATE;
BEGIN
SELECT CASE WHEN to_number( to_char( sysdate, 'HH24' )) >= 22
THEN trunc(sysdate+1) + interval '8' hour
WHEN to_number( to_char( sysdate, 'HH24' )) < 8
THEN trunc(sysdate) + interval '8' hour
WHEN to_number( to_char( sysdate, 'HH24' )) between 8 and 11
THEN trunc(sysdate) + interval '12' hour
WHEN to_number( to_char( sysdate, 'HH24' )) between 12 and 17
THEN trunc(sysdate) + interval '18' hour
WHEN to_number( to_char( sysdate, 'HH24' )) between 18 and 21
THEN trunc(sysdate) + interval '22' hour
ELSE null
END
INTO l_dt
FROM dual;
RETURN l_dt;
END;
NEXT get_next_refresh_time;
私はDBMS_SCHEDULERを使用し、DBMS_MVIEW.REFRESHを呼び出すジョブを設定するのが好きです(http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_mview.htm#ARPLS027を参照)。これには、更新のためのオプションが増えるという追加の利点もあります。