ORA-01795: 列表中的最大表达式数为 1000

今天查看日志的时候发现多次出现如下的异常,查阅了资料后发现IN语句中写的表达式的最大数量不能超过1000。

解决方法: 1. 拆分IN里面的条件,将表达式的数量控制在1000以内,然后通过OR语句连接。

                2.作为子查询。

我使用了第二种方法:

<if test="createBy != null and createBy.name != null and createBy.name != ''">
	AND a.create_by in (select u.id as "createBy.id" FROM sys_user u where u.name LIKE 
		<if test="dbName == 'oracle'">'%'||#{createBy.name}||'%'</if>
		<if test="dbName == 'mssql'">'%'+#{createBy.name}+'%'</if>
		<if test="dbName == 'mysql'">concat('%',#{createBy.name},'%')</if>
	)
</if>

  

第一种方法有时间再试

原文地址:https://www.cnblogs.com/person008/p/8954272.html