查询在 SQL 开发人员中有效,但在 MyBatis 中有错误
Query works in SQL Developer but has error in MyBatis
我的查询在 SQL Developer 中运行良好,但是当我将相同的查询复制到 MyBatis 的映射器 XML 文件中时,我得到一个 ORA-00900:无效的 SQL 语句.
映射器文件的子集:
<select id="getTotalUniqueUsersByPage">
resultType="KeyValuePair"
parameterType="RequestFilter">
select KEY as key,sum(single_value) as value from (
select schcm.title as key
,schuc.usage_count AS single_value
from usage_count schuc
inner join content_master schcm
on schcm.trace_id=schuc.trace_key
where schcm.pagetype='Page'
)
GROUP by KEY
order by value desc
</select>
### The error occurred while setting parameters
### SQL: resultType="KeyValuePair" parameterType="RequestFilter"> select KEY as key,sum(single_value) as value from ( select schcm.title as key ,schuc.usage_count AS single_value from usage_count schuc inner join content_master schcm on schcm.trace_id=schuc.trace_key where schcm.pagetype='Page' ) GROUP by KEY order by value desc
### Cause: java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement
在大多数情况下,在 SQL Developer 中运行的常规 SQL 在直接粘贴到 MyBatis 映射器文件中时也会运行。好吧,无论如何。我确实记得在最后检查分号,但这次没有犯那个错误。我想要的是让 MyBatis 调用像 SQL 开发人员调用一样工作。
更新:
尝试过
<select id="getTotalUniqueUsersByPage">
resultType="KeyValuePair"
parameterType="RequestFilter">
select 'SomeTitle' as "Key", 55 as "Value" from dual
</select>
但是那个调用也失败了 "ORA-00900: invalid SQL statement" 为了尊重下面的评论,我把别名括起来,这样保留字 "Key" 应该可以工作,而且确实可以在 SQL开发人员。
所以问题不在于 SQL。问题是 XML.
中额外的关闭 > 标签
<select id="getTotalUniqueUsersByPage">
resultType="KeyValuePair"
parameterType="RequestFilter">
select 'SomeTitle' as "Key", 55 as "Value" from dual
</select>
应该是
<select id="getTotalUniqueUsersByPage"
resultType="KeyValuePair"
parameterType="RequestFilter">
select 'SomeTitle' as "Key", 55 as "Value" from dual
</select>
对我来说,这是一个 XML 验证错误,但我不确定为什么它没有这样显示。我很惊讶它一路走到 Oracle,而不是抱怨不好 XML。
我的查询在 SQL Developer 中运行良好,但是当我将相同的查询复制到 MyBatis 的映射器 XML 文件中时,我得到一个 ORA-00900:无效的 SQL 语句.
映射器文件的子集:
<select id="getTotalUniqueUsersByPage">
resultType="KeyValuePair"
parameterType="RequestFilter">
select KEY as key,sum(single_value) as value from (
select schcm.title as key
,schuc.usage_count AS single_value
from usage_count schuc
inner join content_master schcm
on schcm.trace_id=schuc.trace_key
where schcm.pagetype='Page'
)
GROUP by KEY
order by value desc
</select>
### The error occurred while setting parameters
### SQL: resultType="KeyValuePair" parameterType="RequestFilter"> select KEY as key,sum(single_value) as value from ( select schcm.title as key ,schuc.usage_count AS single_value from usage_count schuc inner join content_master schcm on schcm.trace_id=schuc.trace_key where schcm.pagetype='Page' ) GROUP by KEY order by value desc
### Cause: java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement
在大多数情况下,在 SQL Developer 中运行的常规 SQL 在直接粘贴到 MyBatis 映射器文件中时也会运行。好吧,无论如何。我确实记得在最后检查分号,但这次没有犯那个错误。我想要的是让 MyBatis 调用像 SQL 开发人员调用一样工作。
更新: 尝试过
<select id="getTotalUniqueUsersByPage">
resultType="KeyValuePair"
parameterType="RequestFilter">
select 'SomeTitle' as "Key", 55 as "Value" from dual
</select>
但是那个调用也失败了 "ORA-00900: invalid SQL statement" 为了尊重下面的评论,我把别名括起来,这样保留字 "Key" 应该可以工作,而且确实可以在 SQL开发人员。
所以问题不在于 SQL。问题是 XML.
中额外的关闭 > 标签 <select id="getTotalUniqueUsersByPage">
resultType="KeyValuePair"
parameterType="RequestFilter">
select 'SomeTitle' as "Key", 55 as "Value" from dual
</select>
应该是
<select id="getTotalUniqueUsersByPage"
resultType="KeyValuePair"
parameterType="RequestFilter">
select 'SomeTitle' as "Key", 55 as "Value" from dual
</select>
对我来说,这是一个 XML 验证错误,但我不确定为什么它没有这样显示。我很惊讶它一路走到 Oracle,而不是抱怨不好 XML。