ORA-01795 Mybatis解决in操作参数超过1000条出现bug

需求: 执行in操作查询,且in()中的参数超过1000条,如果不做处理,当in中的参数超过1000条会发生错误。

解决方案: IN(1,2,3,…,1000) OR IN(1001,1002,1003,2000)

        FROM
            HPET32TR ET32
        WHERE
            ET32.JUCHU_NO IN
                <foreach collection="list" item="item" index="index" open="(" close=")">
                    <if test="index != 0">
                        <choose>
                            <when test="index % 1000 == 0">) OR ET32.JUCHU_NO IN (</when>
                            <otherwise>,</otherwise>
                        </choose>
                    </if>
                    #{item}
                </foreach>

测试结果如下:(我将1000改成3测试的。排除入力参数为0个的情况)
①参数个数为6:

FROM
    DEV_F.HPET32TR ET32 
WHERE
    ET32.JUCHU_NO IN ('0000000001 ', '0000000002 ', '0000000003 ') 
    OR ET32.JUCHU_NO IN ('0000000004 ', '0000000005 ', '0000000006 ') 

②参数个数为7:

FROM
    DEV_F.HPET32TR ET32 
WHERE
    ET32.JUCHU_NO IN ('0000000001 ', '0000000002 ', '0000000003 ') 
    OR ET32.JUCHU_NO IN ('0000000004 ', '0000000005 ', '0000000006 ') 
    OR ET32.JUCHU_NO IN ('0000000007 ') 

③参数个数为8:

FROM
    DEV_F.HPET32TR ET32 
WHERE
    ET32.JUCHU_NO IN ('0000000001 ', '0000000002 ', '0000000003 ') 
    OR ET32.JUCHU_NO IN ('0000000004 ', '0000000005 ', '0000000006 ') 
    OR ET32.JUCHU_NO IN ('0000000007 ', '0000000008 ')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值