遇到一个问题,利用mybatis传Clob字段,超过一定长度就报ORA-01460,【java对应String,oracle对应Clob】
开始的写法:select * from package_pro.get_proids(to_clob(#{proIds}), to_date(#{upDate},'yyyy-MM-dd'))
然后一次proids的长度为8千多,就出现了ORA-01460,然后照着网上的做法,
(1)mybatis指定jdbcType 【#{proIds, jdbcType=CLOB}】,失败,没效果
(2)mybatis指定自定义TypeHandler,实现BaseTypeHandler<T>,然后在mybatis配置#{proids, t ypeHandler=cn.com.mybatis.test.DateTypeHandler},传值是进去了自定义的DateTypeHandler,但还是失败,没效果
(3)更换新版的oracle驱动jar包,问题解决【原先:ojdbc6】
(4)将过长的proids按一定长度分割为list,再在mybatis foreach遍历,
【此处将String proids按2000长度分割为list,proids.length<2000 list.size() =1,】
mapper.xml
select * from package_pro.get_proids(
<foreach collection="proIdsList" item="item" index="index">
<choose>
<when test="index != (proIdsList.size() - 1)">
to_clob(#{item})||
</when>
<otherwise>
to_clob(#{item})
</otherwise>
</choose>
</foreach>
to_date(#{upDate},'yyyy-MM-dd'))
问题解决