天天看点

模板字符串Oracle存储超长问题:仅能绑定要插入 LONG 列的 LONG 值报错分析解决方法设置字段类型

报错

        The error may involve com.cbry.master.dao.JsonDataCollDao.updateRtJsonDsInfo-Inline

        The error occurred while setting parameters

        SQL: update RT_JSON_DS_INFO set xx=xx

         Cause: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

Mybatis插入Oracle数据库中某条数据的某个字段值过长,如果是varchar2类型的,当长度超过4000(最大值)的时候,oracle会自动将该字段值转为long类型的数据。

分析

实际上并没有导4000

模板字符串Oracle存储超长问题:仅能绑定要插入 LONG 列的 LONG 值报错分析解决方法设置字段类型

但是字符化转换就会有转义字符:

模板字符串Oracle存储超长问题:仅能绑定要插入 LONG 列的 LONG 值报错分析解决方法设置字段类型

解决方法

用resultMap映射来解决查询的问题。插入直插即可。

<resultMap type="com.cbry.RtJsonDsInfoPojo" id="rtJsonDsInfoPojo">
    <result column="JSON_DATA_STRING" jdbcType="CLOB" property="jsonDataString" />
</resultMap>  
           

设置字段类型

不可直接通过数据库图像管理工具进行修改字段类型:出现: ORA-22858: 数据类型的变更无效 ( invalid alteration of datatype)。

修改方法:新增clob类型字段,并备份旧的类型varchar2字段到其,再删去旧的varchar2字段 , 随后将clob字段名称改回去。