改变物化视图的下一条款的条件

时间:2014-07-11 07:41:22

标签: sql oracle oracle-sqldeveloper ora-06502

我正在尝试刷新物化视图几天以及几个小时和我的代码:

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 我试图解决我的问题,但我不能。有没有人对我的问题有任何想法?

感谢。

2 个答案:

答案 0 :(得分:1)

real 错误消息更有说服力:

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

因此,您似乎正在尝试为INTERVAL设置一个太大的值。

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

  • 指定运行日期的语法要好得多,
  • 您会从USER_SCHEDULER_JOB_LOG
  • 获取更新的历史记录
  • 您可以随意启用/禁用刷新

答案 1 :(得分:0)

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