2013-02-08 20 views
2

我一直有一個奇怪的問題,其中一個日期列SYSDATE的比較產生以下錯誤:比較日期列SYSDATE收益率:一個非數字字符被發現,其中一個數字預計

01858. 00000 - "a non-numeric character was found where a numeric was expected" 
*Cause: The input data to be converted using a date format model was 
      incorrect. The input data did not contain a number where a number was 
      required by the format model. 
*Action: Fix the input data or the date format model to make sure the 
      elements match in number and type. Then retry the operation. 

我正在重新創建一個MATERIALIZED VIEW;其中包括一些小的變化,並且每當過程在下面的派生表查詢中止它總是指向「> =」:

SELECT id, 
    desc, 
    start_date, 
    end_date 
FROM T_LIPR_POLICY_ROLE TLPR 
WHERE end_date >= SYSDATE 

現在END_DATE是一種類型DATE和我實際上可以通過本身執行該查詢,但每當我試圖在物化視圖中運行它時,它總是會因上面的錯誤而中止。儘管上週我能夠用相同的查詢創建它。

任何想法?

謝謝,

+0

你可以發佈所有相關的DDL嗎?您的物化視圖是否有可能被更改,並且它不再具有與查詢相同的數據類型? – 2013-02-09 05:41:45

回答

0

是desc的列名?如果是,那麼您使用的是oracle保留關鍵字desc作爲列名。

SELECT id, 
    desc,---- here 
    start_date, 
    end_date 
FROM T_LIPR_POLICY_ROLE TLPR 
WHERE end_date >= SYSDATE 

We cannot use oracle reserved keywords in column names.

請更改列名。

+0

哦,對不起。這不是實際的列名稱。事情是,我可以真正運行查詢本身就好。只要我將它作爲CREATE MATERIALIZED VIEW語句的一部分運行,我會在執行過程中出現約15分鐘的錯誤。 – sonar 2013-02-11 14:13:34

0

嗨,我很抱歉拖延很久。出於安全原因,我無法發佈整個聲明。

現在問題已經解決。問題在於我們的物化視圖腳本是從17個不同的地方通過UNIONs彙總數據。現在出於某種原因,錯誤指向了錯誤的代碼行(見下文)。

SELECT id, 
desc, 
start_date, 
end_date 
FROM T_LIPR_POLICY_ROLE TLPR 
WHERE end_date >= SYSDATE <-- ORACLE POINTS TO THIS LINE 

現在這就像腳本中的第十條語句,但錯誤確實在腳本的第六條語句中;這顯然是誤導性的。在這份聲明中特定的記錄(出數以百萬計)嘗試以下操作:

to_date('/0/ ') <-- This was the cause of the problem. 

注意,該文本不是在實際的腳本,它確實這樣說TO_DATE(varchar類型>的<列名) ,但是1500萬份中的2份記錄具有上述文字。

現在我不明白爲什麼Oracle指向錯誤的代碼行。

¿這是一個Oracle問題嗎? ¿這是SQL Developer的問題嗎? ¿它可能是一個提示衝突?我們使用幾個像這樣的:/* + PARALLEL(init 4)*/

謝謝你的一切幫助。

+0

這對於SQL Developer來說完全是個問題。 Toad準確報告錯誤位置。 – sonar 2013-06-18 15:19:51

相關問題