2014-07-11 18 views
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 我試圖解決我的問題,但我不能。有人對我的問題有任何想法嗎?

謝謝。

+0

對於物化視圖中的NEXT子句,您可以編寫CASE語句,但它只接受兩個條件。我的建議是,如果可以的話,簡化你的狀況。 – yagmurdursun

回答

0

對於物化視圖中的NEXT子句,您可以編寫CASE語句,但它只接受兩個條件(它應該非常簡單,如case when x=x then aa else bb end)。我的建議是,如果可以的話,簡化你的狀況。

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
  • 讓你刷新的歷史,你可以啓用/禁用刷新隨意
+0

謝謝弗蘭克的迴應。我通過簡化病情解決了我的問題。 – yagmurdursun

+0

@yagmurdursun然後,我建議你發佈你的解決方案作爲答案,所以遇到同樣問題的人知道如何解決它。 –