oracle - MyBatis XML Mapper 文件中的 Oracle 错误,但在 SQL Developer 中没有
问题描述
我在 MyBatis XML 包装器中有一个查询,结果是ORA-00904 invalid identifier
. 但是,当我复制日志中显示的语句时,它会运行。
日志消息是
SQL: select /*+ parallel(AUTO) */ avg(DURATION) AVERAGE_SESSION_DURATION
from sc_report_new.sc_hub_session_activity schsa
inner join sc_hub_users schu on schsa.user_key=schu.user_key
inner join sc_hub_user_types schut on chut.user_type_id=schu.user_type_id
inner join sc_hub_content_master schcm on chcm.trace_id_key=schsa.hub_key
WHERE schsa.FISCAL_QUARTER_ID = '2020Q2'
原因:java.sql.SQLSyntaxErrorException:ORA-00904:“SCHSA”。“FISCAL_QUARTER_ID”:标识符无效
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)
映射器查询的片段是
<select id="getDashboardAverageSessionDuration"
resultType="int"
parameterType="com.mycompany.salesconnect.screport.model.AuthorizedHubRequest">
select /*+ parallel(AUTO) */
avg(DURATION) AVERAGE_SESSION_DURATION
from sc_report_new.sc_hub_session_activity schsa
inner join sc_hub_users schu
on schsa.user_key=schu.user_key
inner join sc_hub_user_types schut
on schut.user_type_id=schu.user_type_id
inner join sc_hub_content_master schcm
on schcm.trace_id_key=schsa.hub_key
<include refid="com.mycompany.salesconnect.screport.mapper.hubportfolio.Common.joinHubAuthorizations">
<property name="hubAuthorizations" value="hubAuthorizations"/>
</include>
<where>
<if test="hubRequestFilter.dateRangeSpecified">
schsa.time_stamp
BETWEEN to_date(#{hubRequestFilter.fromDate}, 'mm/dd/yyyy')
AND
to_date(#{hubRequestFilter.toDate}, 'mm/dd/yyyy')
</if>
<if test="!hubRequestFilter.dateRangeSpecified">
<if test="hubRequestFilter.quarterListByNameNotEmpty">
SCHSA.FISCAL_QUARTER_ID IN
<foreach item="quarterName" collection="hubRequestFilter.quarterListByName" open="(" close=")" separator=",">
<bind name="quarterId"
value="@com.mycompany.salesconnect.screport.dao.SCHubPortfolioUtil@getQuarterAsId(quarterName)"/>
#{quarterName}
</foreach>
</if>
<if test="hubRequestFilter.quarterListByIdNotEmpty">
SCHSA.FISCAL_QUARTER_ID IN
<foreach item="quarterId" collection="hubRequestFilter.quarterListById" open="(" close=")" separator=",">
#{quarterId}
</foreach>
</if>
</if>
<include refid="com.mycompany.salesconnect.screport.mapper.hubportfolio.Common.whereHubRequestFilter"><property name="hubRequestFilter" value="hubRequestFilter"></property></include>
<include refid="com.mycompany.salesconnect.screport.mapper.hubportfolio.Common.whereHubAuthorizations"><property name="hubAuthorizations" value="hubAuthorizations"></property></include>
</where>
</select>
我在 XML 中查找不可打印的字符,但没有看到任何字符。说明什么应该很明显,SC_HUB_SESSION_ACTIVITY 表有一个 FISCAL_QUARTER_ID 字段。有趣的是,如果我选择另一个 SCHSA 列,它会起作用。出于某种原因,系统将这个字段单选为任意不工作。
解决方案
这不是 MyBatis 的问题,而是指向与我使用的 SQL Developer 相同的数据库。
推荐阅读
- python - Heroku 上的 Django 项目部署失败
- javascript - 用作局部变量的未定义函数参数
- database - 时间序列数据库
- python - 如何找到线和轮廓之间的交点
- apache-kafka - Kafka 元数据不一致
- javascript - 自动生成的 id 的哈希在页面加载时不起作用
- flutter - 在 Flutter 应用程序中使用 Facebook 受众网络实现 admob 中介
- web - 因为违反内容安全策略而拒绝执行内联脚本(primefaces 8)
- python - 使用循环创建多个文件夹,并在此文件夹内保存 Excel 工作表
- java - 如何在java中使用lambda表达式编写弹性搜索代码