Oracle ORA-01461

昨天做联调时,在10g上测试一点儿问题都没有,但切到9i的库上,却直接报错:

ORA-01461:仅可以为插入 LONG 列的 LONG 值赋值

查找资料后发现,是Oracle9i的一个bug,当Clob字段长度在1000~2000之间时,
就会出现这个错误。

解决方法有两个:
1、替换驱动为神奇的版本ojdbc14-10.2.0.3.0.jar,可以避免这个问题。
2、利用Spring+Hibernate解决这个问题

EventSendInfo.hbm.xml

-<property name="MSG" type="java.lang.String">
+<property name="MSG" type="org.springframework.orm.hibernate3.support.ClobStringType">

applicationContext.xml

...
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
...
+<property  name="lobHandler"  ref="oracleLobHandler"/> 
</bean>

...
+<bean id ="oracleLobHandler" class ="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init ="true">  
+<property name ="nativeJdbcExtractor"  ref ="nativeJdbcExtractor"/>
+</bean >     
+<bean id ="nativeJdbcExtractor" class ="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor" lazy-init="true"/>

...

Leave a Reply

Your email address will not be published. Required fields are marked *

*