Java 使用tOracleOutput时未捕获Talend BatchUpdateException
我正在开发一项工作,将数据从一些表传输到另一些表。有时输入的字段为null,然后Talend调用方法Java 使用tOracleOutput时未捕获Talend BatchUpdateException,java,oracle,talend,Java,Oracle,Talend,我正在开发一项工作,将数据从一些表传输到另一些表。有时输入的字段为null,然后Talend调用方法oracle.jdbc.driver.setNull。有一刻,我发现了一个Oracle错误,Talend没有发现。错误是:ORA-01401插入的值对于列来说太大。但此时Talend正试图在接受它的字段中插入一个空值 我不明白为什么我会出错,为什么泰伦德没有发现 例外情况如下: Exception in component tOracleOutput_1 java.sql.BatchUpdateE
oracle.jdbc.driver.setNull
。有一刻,我发现了一个Oracle错误,Talend没有发现。错误是:ORA-01401插入的值对于列来说太大
。但此时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)
以下是作业的屏幕截图:
我终于解决了我的问题。stacktrace没有指示正确的行号。 使用拒绝链接,我发现问题不在stacktrace显示的行上 实际上,有一个字段太短,无法容纳我想要输入的数据量,但stacktrace显示的数据量却不够。我不知道为什么错在11910行
为了弄清楚,我使用了拒绝链接,然后手动检查了evry字段,以找出错误所在。我不太确定我是否理解您在这里提出的问题。你的意思是,当试图在一个可为null的列中插入null时,Oracle抛出了
ORA-01401
错误?我假设您已经在服务器端跟踪/登录的情况下运行了此作业,以查看到底是什么导致了问题?您是否希望Talend处理此错误,然后继续?默认的行为是退出提交,而Talend似乎就是这么做的。我有两个问题:我不明白为什么会出现Oracle错误,我不明白Talend为什么没有捕捉到错误。我无法访问数据库的日志。我猜错误实际上是由它认为的原因造成的:您试图插入/更新一个对字段来说太大的值。检查要插入/更新的数据以及要插入/更新的表中的字段长度。如果您禁用组件的“die on error”复选框,则Talend应该捕获错误并继续,但实际上您最好修复目标表或源数据。如果您没有权限更改目标表,则可以对数据进行子串以安全地截断它。我可以在堆栈跟踪中看到错误是由调用setNull方法引起的,因此我不理解如何可能发生错误。出现错误的字段是日期,输入和输出表的字段格式相同。是否因为数据太大而导致该列出错?如果你编辑了你的文章来展示你如何修复它,而不仅仅是你如何诊断真正的问题(尽管这也很有用),那么对于遇到这个错误的其他人来说,这会更有用。