0

我试图在几天和几个小时之间刷新物化视图和我的代码:

ALTER MATERIALIZED VIEW M_MVIEW
REFRESH FORCE ON DEMAND START WITH TO_DATE('11-07-2014 10:30:00', 'DD-MM-YYYY HH24:MI:SS') 
                        NEXT (CASE WHEN (TO_CHAR(SYSDATE,'D','NLS_SORT = XTURKISH') = 5) AND (SYSDATE BETWEEN (TRUNC(TO_DATE('10-07-2014 21:00:00', 'DD-MM-YYYY HH24:MI:SS')) + 20/24) AND (TRUNC(TO_DATE('10-07-2014 21:00:00', 'DD-MM-YYYY HH24:MI:SS')) + 31/24)) THEN TRUNC(NEXT_DAY(TO_DATE('10-07-2014 21:00:00', 'DD-MM-YYYY HH24:MI:SS'), 'PAZARTESİ')) + 7/24
                                   WHEN (SYSDATE BETWEEN (TRUNC(TO_DATE('10-07-2014 21:00:00', 'DD-MM-YYYY HH24:MI:SS')) + 20/24) AND (TRUNC(TO_DATE('10-07-2014 21:00:00', 'DD-MM-YYYY HH24:MI:SS')) + 31/24)) THEN TRUNC(SYSDATE) + 31/24
                                   ELSE SYSDATE + 2/24 END)

但是我遇到了错误;ORA-06502: PL/SQL: numeric or value error%s 我试图解决我的问题,但我不能。有人对我的问题有任何想法吗?

谢谢。

4

2 回答 2

1

真正的错误信息更能说明问题:

ORA-12899: Value too large for column "SYS"."JOB$"."INTERVAL#" (actual: 595, maximum: 200)

所以看起来你试图设置一个INTERVAL太大的值。

就个人而言,我从不使用START WITH / NEXT物化视图。我更喜欢为刷新创建DBMS_SCHEDULER工作,因为

  • 指定运行日期的语法要好得多
  • 您可以从USER_SCHEDULER_JOB_LOG
  • 您可以随意启用/禁用刷新
于 2014-07-11T08:01:18.900 回答
0

对于物化视图中的 NEXT 子句,您可以编写 CASE 语句,但它只接受两个条件(应该非常简单,如case when x=x then aa else bb end)。我的建议是,如果可以的话,简化你的条件。

于 2014-07-14T12:13:36.863 回答