Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用tOracleOutput时未捕获Talend BatchUpdateException_Java_Oracle_Talend - Fatal编程技术网

Java 使用tOracleOutput时未捕获Talend BatchUpdateException

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

我正在开发一项工作,将数据从一些表传输到另一些表。有时输入的字段为null,然后Talend调用方法
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方法引起的,因此我不理解如何可能发生错误。出现错误的字段是日期,输入和输出表的字段格式相同。是否因为数据太大而导致该列出错?如果你编辑了你的文章来展示你如何修复它,而不仅仅是你如何诊断真正的问题(尽管这也很有用),那么对于遇到这个错误的其他人来说,这会更有用。