ORA-01461: can bind a LONG value only for insert into a LONG column
这个Oracle错误可能大家都多少见过吧。也让人郁闷过吧。现在说一句,希望能帮到大家:
这个错误一般不是数据库里的字段类型问题,而是你的ojdbc版本有些问题,也不能说不与数据库不匹配。大家可以换成10.2或9的版本试试,可能让你一阵惊喜哦。本人推荐使用10.2的ojdbc
更新091014:
如果把insert或者update语句直接在PL/SQL里面跑,或者拼成sql语句在程序里执行,都是没问题的,但是如果是用ojdbc驱动的方法(包括hibernate),就会出错。此外,在另外一台Linux的机器上的Oracle9.2.0.8就没问题(生产机是Windows系统,Oracle9.2.0.1)。
经过google和多个交叉测试,排除了操作系统、中间件平台(Weblogic)的问题。在红伟的指点下,找到这么一个网页,把这个问题的原因说得好像比较清楚(wordpress的,需要翻墙):http://vsadilovskiy.wordpress.com/2007/10/19/ora-01461-can-bind-a-long-value-only-for-insert-into-a-long-column/
里面提到的解决办法是,用新版的ojdbc驱动,然后把OracleDatasource的oracle.jdbc.RetainV9LongBindBehavior属性设为true,经测试,并不生效。测试了从Oracle网站下载的不同版本(9i,10g各小版本)的ojdbc.jar,情况依旧。
最后,把生产机的Oracle升级到9.2.0.8,问题解决。
大家,也只能用上面两个方法试试了,应该能解决问题。但换jar我个人工作中用过,不是一个有[保证]的办法。
开心过好每一天。。。。。