【问题标题】:Query works in SQL Developer but has error in MyBatis查询在 SQL Developer 中有效,但在 MyBatis 中有错误
【发布时间】:2019-09-03 15:36:11
【问题描述】:

我的查询在 SQL Developer 中运行良好,但是当我将相同的查询复制到 MyBatis 的映射器 XML 文件中时,我得到一个 ORA-00900: invalid SQL statement。

映射器文件的子集:

    <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 Developer 调用一样工作。

更新: 试过了

   <select id="getTotalUniqueUsersByPage">
            resultType="KeyValuePair" 
           parameterType="RequestFilter">
       select 'SomeTitle' as "Key", 55 as "Value" from dual
    </select>

但是该调用也因相同的“ORA-00900:无效 SQL 语句”而失败。为了尊重下面的 cmets,我将别名括起来,以便保留字“Key”应该起作用,并且确实可以在 SQLDeveloper 中找到.

【问题讨论】:

  • 您需要给派生表起别名(括号内的选择)。基本上... from (select ...) &lt;ALIAS&gt; GROUP by KEY...。我无法想象 SQL 可以在任何地方工作。
  • 哪个 Oracle 版本?它是否支持 ANSI 连接? ;)
  • @Woodsman,你不需要那对额外的括号。
  • key 是保留关键字。你需要引用它select "KEY" as "key" ...

标签: sql oracle mybatis


【解决方案1】:

所以问题不在于 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 2023-03-31
    • 2013-01-24
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多