问题背景
邮箱表PH_MAILINFO的内容(mailcontent)字段大小设置为varchar2(4000)
当向mailcontent字段中插入的数值大于2000时 便会抛出 Cause: java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException
原因:
指用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是varchar2类型(最大长度为4000字节)的,当长度超过2000--4000(最大值)之间的时候,oracle会自动将该字段值转为long型的,插入操作失败。
解决方法:
一:从代码中解决:若插入该字段的数据过多 则只取2000长度的数据 substring(0,2000)
二:从数据库中解决:将此字段的类型改为clob或者blob类型;
但是将oracle数据库表中的varchar2类型直接改成clob类型会失败,解决办法如下:new 一个Sql view,执行下列代码:
alter table table_name modify col_name long;
alter table table_name modify col_name clob;
在进行此操作之前需要先备份表的数据,然后清空表中的数据,再修改表的字段属性,最后将数据导入即可。
报错的截图: