0

我正在尝试在 java 中对 AS400 执行查询,但收到以下错误。我相信它与分组有关,并为聚合列分配了别名:

SUM( ILHRS ) AS \"SumIlhrs\"

我可能没有正确地转义引号吗?我尝试了以下但没有成功

SUM( ILHRS ) AS \"SumIlhrs\", ..,
SUM( ILHRS ) AS \'SumIlhrs\', ...
SUM( ILHRS ), ...

该查询已经过测试并且可以正常工作。

String query = "SELECT ILER,PREN,SUM( ILHRS ) AS \"SumIlhrs\" FROM HRDBFA.PYPIL PYPIL, HRDBFA.PRPMS PRPMS WHERE PYPIL.ILEN = PRPMS.PREN AND ( ( ILFYR = 2013 "  +
" AND ILFMON = 9) AND PRGP IN( 'U55', '066', '088' )) GROUP BY ILER,PREN";

错误信息:

SQLException: 字符、标记或子句无效或缺失。

任何帮助表示赞赏。

4

1 回答 1

1

我不相信你需要转义双引号。事实上,正如 Jim Garrison 所建议的,您根本不需要在分配的名称周围加上双引号。尝试

"SELECT ILER,PREN,SUM( ILHRS ) AS SumIlhrs FROM...

编辑

IBM i 上的 DB2 有两种名称:System 和 SQL。系统命名会SELECT ILER,PREN,SUM( ILHRS ) AS SumIlhrs FROM HRDBFA/PYPIL PYPIL, HRDBFA/PRPMS PRPMS WHERE PYPIL.ILEN = PRPMS.PREN AND ( ( ILFYR = 2013 AND ILFMON = 9) AND PRGP IN( 'U55', '066', '088' )) GROUP BY ILER,PREN 令我感到惊讶的是,JDBC 驱动程序是为系统命名设置的,但这是可能的。

另一个想法:您只在一个地方使用相关名称。要么完全删除相关名称,要么使用适当的相关名称限定每一列。 SELECT ILER,PREN,SUM( ILHRS ) AS SumIlhrs FROM HRDBFA/PYPIL, HRDBFA/PRPMS WHERE ILEN = PREN AND ( ( ILFYR = 2013 AND ILFMON = 9) AND PRGP IN( 'U55', '066', '088' )) GROUP BY ILER,PREN

于 2013-10-22T20:28:54.150 回答