又见“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”

环境:
数据库:Oracle 9i
数据库字段类型:varchar2(4000)
输入汉字:大于1000字

原因:
   我的数据库字符集应该是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段,所以报错。

当时的解决办法:建议减小字段长度或拆分。实在需要的,可以转而采用CLOB字段类型。

Caused by: java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
我在系统的一个页面上加载一个.xml文件时,出现了这个错误。

原因:

当插入数据的长度在1000、2000内,就会抛出这样的错误。


解决方法:

思路:将存储的字符串补上空格,让其超过2000的长度即可,但仅限与紧急解决问题。
1、首先在.java文件中引入import org.apache.commons.lang.StringUtils;
2、在此.java文件的相应的方法里添加如下判断:

    // 处理ora-1461问题(clob长度在1000-2000之间会出错)
        if (xml.length() >= 1000 && xml.length() <= 2000) {
            xml = StringUtils.rightPad(xml, 2008);
        }

猜你喜欢

转载自debugbb.iteye.com/blog/1532790