2014-07-07 55 views
0

我正在開發一項工作,在該工作中,我將某些表中的數據傳輸給其他人。有時來自輸入的字段爲空,然後Talend調用方法oracle.jdbc.driver.setNull。有一次,我得到了Talend沒有發現的Oracle錯誤。錯誤是:ORA-01401 value inserted too big for the column。但是在這一刻Talend正試圖在接受它的領域中插入一個Null值。Talend BatchUpdateException在使用tOracleOutput時未捕獲

我不明白爲什麼我有錯誤,爲什麼Talend沒有抓住它。

這裏是個例外:

Exception in component tOracleOutput_1 
java.sql.BatchUpdateException: ORA-01401: valeur insérée trop grande pour colonne 

at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459) 
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4373) 
at oracle.jdbc.driver.OraclePreparedStatement.checkBindTypes(OraclePreparedStatement.java:3650) 
at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:1435) 
at maxmigtransformation.t_dm_all_0_1.T_DM_ALL.tOracleInput_1Process(T_DM_ALL.java:11910) 
at maxmigtransformation.t_dm_all_0_1.T_DM_ALL.runJobInTOS(T_DM_ALL.java:30394) 
at maxmigtransformation.t_dm_all_0_1.T_DM_ALL.main(T_DM_ALL.java:29916) 

這裏是工作的一個截圖:

Talend Job

+0

我不太確定我明白你在這裏問什麼。你是否說過,當試圖插入一個空的列到一個可空的列Oracle拋出'ORA-01401'錯誤?我假設你已經在服務器端跟蹤/登錄的情況下運行了這個工作,看看究竟是什麼導致了這個問題?你是否想讓Talend對這個錯誤做些什麼,然後繼續?默認行爲是退出提交,這就是Talend似乎在做的事情。 – ydaetskcoR

+0

我有兩個問題:我不明白爲什麼有Oracle錯誤,我不明白爲什麼talend沒有發現錯誤。我無法訪問數據庫的日誌。 – Alucard

+0

我想這個錯誤實際上是由它所認爲的:你試圖插入/更新一個太大的字段值。檢查你正在插入/更新的數據以及你插入/更新表中的字段長度。如果您禁用組件的「死於錯誤」複選框,那麼Talend應該捕獲錯誤並繼續進行,但實際上您最好修復目標表或源數據。如果您無權更改目標表,則可以對數據進行子串處理以安全截斷它。 – ydaetskcoR

回答

0

我終於解開了我的probleme。堆棧跟蹤沒有指出好的行號。 使用拒絕鏈接我看到問題不在堆棧跟蹤顯示的行上。

實際上有一個字段對於我想要插入的數據量來說太短了,但並不是堆棧跟蹤顯示的字段。我不知道爲什麼錯誤說線11910.

爲了找出我使用拒絕鏈接,然後我手動檢查埃夫裏領域找出錯誤的地方。

+1

錯誤是因爲數據對於列太大了嗎?如果你編輯了你的帖子來顯示你做了什麼來修復它,而不是你如何診斷真正的問題(儘管這也是有用的),那麼遇到這個錯誤的人會更有用。 – ydaetskcoR

相關問題