我需要以不规则的时间间隔自动刷新物化视图,例如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;
您可以在NEXT
有CASE
声明。所以,你可以像
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)。这还有更多选项可用于刷新。
感谢您的链接......这非常有用... – 2012-07-18 14:53:56
谢谢先生。我感谢你的帮助和时间。 – 2012-07-17 17:47:57
但实际上当我试图使用这个命令时,我得到一个错误,说 '错误报告: SQL错误:ORA-12899:值太大的列“SYS”。“SNAP $”。“”AUTO_FUN“(实际:748 ,最大值为200) 12899. 00000 - “列%s的值太大(实际:%s,最大值:%s)”' 当我试图只使用sysdate +8/24时,我没有得到这个错误。 .. – 2012-07-17 17:49:41
@ user1532517 - 然后你需要使用我建议的函数方法。我不确定可接受的'CASE'声明的最大长度是多少。 – 2012-07-17 17:55:51