我正在尝试用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:字符、标记或子句无效或缺失。
任何帮助将不胜感激。
我不认为你需要转义双引号。 事实上,正如吉姆·加里森(Jim Garrison)所建议的那样,您根本不需要将分配的名称括起来的双引号。 尝试
"SELECT ILER,PREN,SUM( ILHRS ) AS SumIlhrs FROM...
编辑
DB2 on IBM i 有两种名称样式: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