【发布时间】:2019-09-04 15:11:14
【问题描述】:
我正在通过我的 Java 应用程序运行一个相当大的查询(约 83k 个结果),它产生了以下错误:
java.sql.SQLException:[SQL0901] SQL 系统错误。原因 。 . . . . : 一个SQL系统er 发生错误。当前的 SQL 语句无法成功完成。该错误不会阻止处理其他 SQL 语句。以前的消息可能表明 SQL 语句存在问题,并且 SQL 没有正确诊断错误。之前的消息标识符是 MCH1210。发生内部错误类型 3002。如果预编译,处理将不会继续超出此语句。恢复:查看前面的消息,确定SQL语句是否有问题。要查看消息,请使用 DSPJOBLOG 命令(如果以交互方式运行),或使用 WRKJOB 命令查看预编译的输出。接收此返回码的应用程序可能会尝试进一步的 SQL 语句。更正所有错误并重试请求。
从this 页面来看,似乎错误 SQL0901 意味着我可能有驱动程序问题。
深入研究 MCH1210 错误,得到了this StackOverflow question,所以我想也许我会遇到同样的问题,但是有一些不同之处。
当我尝试在 System iNavigator 中运行查询时,它运行良好。当它在我的应用程序中运行时,出现上述错误。
这是我的查询:
SELECT
DWVNDN, DWINVN, DWDTEI, DWRTPE, DWINAM, DWCHKN, DWJCDE
FROM HSDATA4.DWRECAP
WHERE DWDTEI > 20180901 AND (DWRTPE = 2 OR DWRTPE = 3) AND DWINVN IN
(SELECT DW.DWINVN
FROM HSDATA4.DWRECAP DW
INNER JOIN HSDATA4.FXVNDCP FX ON DW.DWVNDN = FX.FXVNDN
WHERE DW.DWRTPE = 1 AND DW.DWDTEI BETWEEN 20180904 AND 20190904)
ORDER BY DWDTEI ASC, DWVNDN ASC;
我应该注意,当将内部查询从 SELECT ... 更改为 SELECT COUNT(*) 以获取返回的记录计数时,返回值为 83314,因此主查询使用了超过 83k 个参数。
我本来打算忽略它,因为我得到了结果,但似乎有些结果最终被截断了,所以我不知道如何继续。
另外,如果您讨厌数据库中的列名...我也是。这不是我的选择...
【问题讨论】:
-
您的 i 版本的 i 系列级别 当前 (最新的 PTF)吗? “内部错误类型 3002”值得搜索。您应该编辑您的问题以提供确切的 i 版本、您正在使用的驱动程序(其名称和版本)。
-
@mao 你能指出我找到该信息的正确方向吗?我不知道去哪里找。
-
您是否查看了处理请求的系统作业的作业日志以查看是否有更多详细信息?