【问题标题】:Java SQLException SQL0901 and AS400 MCH1210 errorsJava SQLException SQL0901 和 AS400 MCH1210 错误
【发布时间】: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 你能指出我找到该信息的正确方向吗?我不知道去哪里找。
  • 您是否查看了处理请求的系统作业的作业日志以查看是否有更多详细信息?

标签: java db2 db2-400


【解决方案1】:

内部连接不是为您提供所需的一切吗?

SELECT
   DW.DWVNDN, DW.DWINVN, DW.DWDTEI, DW.DWRTPE, DW.DWINAM, DW.DWCHKN, DW.DWJCDE
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
   AND DW.DWDTEI > 20180901 AND DW.DWRTPE IN (2,3)
ORDER BY DW.DWDTEI ASC, DW.DWVNDN ASC;

【讨论】:

  • 不,这根本不起作用。我们通过两次使用不同的值来冲突 DWRTPE 字段。这个想法是 DWRTPE = 1 意味着它是原始发票数据,而 2 或 3 是调整或付款。理想情况下,我们只提取原始发票日期在日期范围之间的发票数据,而其他两种类型在它之后。在开始日期之前提取发票上的付款/调整是没有用的。
【解决方案2】:

外连接怎么样

SELECT
   DW2.DWVNDN, DW2.DWINVN, DW2.DWDTEI, DW2.DWRTPE, DW2.DWINAM, DW2.DWCHKN, DW2.DWJCDE
   FROM
      (( HSDATA4.DWRECAP DW INNER JOIN HSDATA4.FXVNDCP FX
         ON DW.DWVNDN = FX.FXVNDN AND DW.DWRTPE = 1
            AND DW.DWDTEI BETWEEN 20180904 AND 20190904)
      LEFT OUTER JOIN HSDATA4.DWRECAP DW2
         ON DW.DWVNDN = DW2.DWVNDN
            AND DW2.DWDTEI > 20180901 AND DW2.DWRTPE in (2,3))

内连接选择有效日期范围之间的初始发票类型 1,左外连接选择有修改的匹配发票编号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多