Search code examples
javaoracle-databasetalend

Talend BatchUpdateException not caught while using tOracleOutput


I'm developing a job in which I transfer data from some tables to some others. Sometimes fields from the input are null and then Talend calls the method oracle.jdbc.driver.setNull. At one moment I got an Oracle error that isn't caught by Talend. The error is : ORA-01401 value inserted too big for the column. But at this moment Talend is trying to insert a Null value in a field which accept it.

I don't understand why I have the error and why Talend didn't catch it.

Here is the exception:

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)

Here is a screenshot of the job:

Talend Job


Solution

  • I finally solved my problem. The stacktrace was not indicating the good line number.
    Using the reject link, I saw the problem wasn't on the line the stacktrace showed.

    There was effectively a field that was too short for the amount of data I wanted to insert into it, but not the one the stacktrace showed. I don't know why the error says line 11910.

    To figure it out, I used the reject link and then I checked every field by hand to figure out where the error was.