2011-11-01 237 views
0

通過我的PHP錯誤日誌來看看,我經常看到一個與特定存儲過程相關的ORA-01858錯誤條目。從我可以告訴搜索這個錯誤代碼的信息來看,它總是將錯誤輸入傳遞給TO_CHAR()函數的結果。問題是,所討論的存儲過程只有一個TO_CHAR()函數,而我傳遞的值實際上是硬編碼的。 (這是一個NVL()的第二個參數下面的代碼:奇怪的ORA-01858錯誤

ROUND(SYSDATE - NVL(PENDING_CLOSE_DT, TO_DATE('2000-01-01','YYYY-MM-DD')), 7) AS PENDING_DURATION 

他這樣在此過程中僅使用TO_DATE()的,爲什麼我會得到一個ORA-01858錯誤是有一些其他情況下,我可以產生這樣的錯誤?部分問題是,這只是有時發生。一般來說,使用這個存儲過程的程序工作正常,我甚至知道這一點的唯一原因是通過檢查錯誤日誌

+0

哪個版本你正在使用的數據庫?我認爲PENDING_CLOSE_DT有一個DATE的數據類型。您的錯誤日誌是否提供了任何其他信息,例如行號或上下文?例如,錯誤是否僅在PENDING_CLOSE_DT爲空時發生。 – APC

+1

如果您知道發生錯誤的唯一原因是在日誌文件中查找,也就是說,如果此子例程失敗,則沒有其他任何失敗,那麼您顯然不需要它。所以就把它撕掉。 – APC

+1

您是否有隱式日期轉換,類似於'PENDING_CLOSE_DT ='2000-01-01''沒有'TO_DATE()'和格式掩碼,與您的NLS_DATE_FORMAT不匹配? –

回答

0

因爲你的to_date()行沒有什麼不對,你是否可能在某處有一個to_char()函數可能會給出錯誤?