【发布时间】:2017-01-16 13:55:09
【问题描述】:
我有一个在 sqldeveloper 中有效的查询,但在 jpql (eclipselink 2.6) 中无效。
select trunc(SYS_CR_DT, 'mm'), count(trunc(SYS_CR_DT, 'mm')) from A
group by trunc(SYS_CR_DT, 'mm')
order by trunc(SYS_CR_DT, 'mm') DESC;
这在sqldeveloper中有效,但这不是(在jpql中),说它不是按表达式分组:
"SELECT FUNCTION('TRUNC', lh.sysCreateDate, 'mm'), COUNT(FUNCTION('TRUNC', lh.sysCreateDate, 'mm')) "
+ " FROM A lh"
+ " GROUP BY FUNCTION('TRUNC', lh.sysCreateDate, 'mm')"
+ " ORDER BY FUNCTION('TRUNC', lh.sysCreateDate, 'mm') DESC";
这也有效,因此使用该功能进行分组是有效的:
"SELECT FUNCTION('TRUNC', lh.sysCreateDate), COUNT(FUNCTION('TRUNC', lh.sysCreateDate)) "
+ " FROM A lh"
+ " GROUP BY FUNCTION('TRUNC', lh.sysCreateDate)"
+ " ORDER BY FUNCTION('TRUNC', lh.sysCreateDate) DESC";
这也有效,所以不是第二个参数的问题,而是分组的问题:
"SELECT FUNCTION('TRUNC', lh.sysCreateDate, 'mm'), COUNT(FUNCTION('TRUNC', lh.sysCreateDate, 'mm')) "
+ " FROM A lh"
长话短说:当我添加第二个参数时,它仍然是一个有效的函数调用,但在 group by 中不起作用。
任何想法将不胜感激。
【问题讨论】:
-
"SELECT FUNCTION('TRUNC', lh.sysCreateDate, 'mm'), COUNT(FUNCTION('TRUNC', lh.sysCreateDate, 'mm')) " + " FROM A lh" + " GROUP BY FUNCTION('TRUNC', lh.sysCreateDate, 'mm')" + " ORDER BY FUNCTION('TRUNC', lh.sysCreateDate, 'mm')DESC";也不是那样工作,当我尝试不同的事情时,我只是把别名放在最后,没有别名存在同样的问题。适用于 1 个参数,不适用于 true。使用两个不分组的参数,使用一个分组
-
您的问题应该定义“有效”和“无效”之间的区别 - 是否存在异常、错误结果等。JPQL 解析器可能正在验证 JPQL 并且无法确定函数在同一个子句上运行,在这种情况下,只需使用本机查询即可。
标签: oracle jakarta-ee eclipselink jpql