ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法
Posted 力群
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法相关的知识,希望对你有一定的参考价值。
ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法
今天遇到的一个问题:
直接修改数据表中的某些字段数据内容时报错:
ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法
上网查询发现解决途径有:
法1,数据库字符集应该是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义 中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超 过4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段,所以报错。
當時的解决办法:建议减小字段长度或拆分。实在需要的,可以转而采用CLOB字段类型。
但我的修改的数据不可能超过这个长度,就像http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html 评论1楼所说,我的长度太小,根本不会是这个问题
此法pass!
法2,采用Oracle 10g最新的ojdbc14.jar驱动替換原有的驅動。
我直接在数据库中操作的,应该说是用不到这些驱动的。此法不可用于我的情况。
ORA-01461: can bind a LONG value only for insert into a LONG column
开发项目,今天又难到问题。junit测试写数据到oracle时,出现:ORA-01461: can bind a LONG value only for insert into a LONG column错 误,郁闷,试了几次发现,中文才会有这个问题,而且jsp页面里输入的中文又不会报这个错(前端是struts)。像mysql的话,很有可能是数据库字 符编码问题,就怀疑是否为字符编码问题(这种思维不知道会不会很傻),因为项目所有编码都是utf-8, 看了下oracle是zhs16GBK。然后就建一个gbk的项目来测试,结果还是出现此问题。后来就换用旧系统的classes12.jar驱动测试 下,^_^, 不会了,太好了。看了下classes12.jar的版本是9.0.2.0.0的而且又是classes12.jar不爽,后来看到一个帖子,说:用9的和10.2的没有此问题,我回去看下之前出问题的版本是10.1.0.2.0,郁闷,用的数据库是10.2.0.1.0。马上换成10.2.0.1.0的版本。当初不注意,今天花了我几个小时。我一直以为jdbc是数据库对应的。对应的jdbc在oracle安装目录可以找到oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar 问题总算解决,^_^ |
以上是关于ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法的主要内容,如果未能解决你的问题,请参考以下文章
oracle: sql语句报ora-01461/ora-00911错误
关于blob转到目标库报ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误解决方案
mybatis + oracle insert clob,出现ORA-01461:仅能绑定要插入LONG列的LONG值
[Oracle with Asp.Net] ORA-01461: 只有在将值插入数据类型为 LONG 的数据栏时, 才可以连结一个 LONG 值