mapper.xml文件中查询Oracle报参数个数错误

在使用MyBatis的mapper.xml文件中,尝试通过CONCAT进行Oracle查询时遇到参数个数错误的问题。错误源于Oracle不支持CONCAT函数接收三个参数。解决方案包括使用两个CONCAT函数串联或使用'%' || 字段名 || '%'的拼接方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.场景描述
我的 mapper.xml文件中查询Oracle数据的写法如下:
 

	<select id="selectCountBetweenTime" parameterType="java.util.Map" resultType="int">
		select count(*) from CHAIN_ORDER where 
		SELLER_NAME LIKE CONCAT('%', #{platform, jdbcType=VARCHAR}, '%')
		<![CDATA[and PAY_TIME >= #{beginTime, jdbcType=TIMESTAMP}
			    and  PAY_TIME < #{endTime, jdbcType=TIMESTAMP}]]>
	</select>

2.故障现象
2019-06-21 17:54:18.722 [ERROR] [Saturn-OrderCountMonitorJob-14-thread-1] druid.sql.Statement [statementLogError-149] -{conn-10010, pstmt-20000} execute error. select count(*) from CHAIN_ORDER where 
        SELLER_NAME LIKE CONCAT('%', ?, '%')
         and PAY_TIME >= ?
                and  PAY_TIME < ?
java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)

3.问题分析
oracle中不支持concat的三个参数的拼接。

4.解决方案
select * from SYS_MENU where url like concat(concat(‘%’,#{roleName}),’%’)
或者
select * from SYS_MENU where url like ‘%’ || #{roleName} || ‘%’; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值