论坛首页 综合技术论坛

奇怪的ORACLE 错误ORA-01461,求助

浏览 13694 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-02  
DAO
最近项目中需要在一个表的字段中插入长的字符串,大概1100个中英文混合字符吧,在inesrt一条记录的时候,当OPERATION_CONTENT字段(VARCHAR2(4000))长度为1000多个的时候,数据库报ORA-01461错误,但是,如果在INSERT之前手工为OPERATION_CONTENT的后面加上空格,使它的长度超过2000就不会报错,可以正常插入,用HIBERNATE和IBATIS都出现一样的情况,但是同样的语句在PLSQL或者TOAD中执行是正常的.系统环境为ORACLE9I,驱动是ojdbc14_10g.jar

另外,根据我的测试发现,如果OPERATION_CONTENT字段为纯汉字,那么如果使用ojdbc14_10g.jar驱动,OperationContent的长度超过1000就会报错;如果使用class12.jar驱动,OPERATION_CONTENT的长度超过666就会报错,真是奇怪.但是在TOAD中,OPERATION_CONTENT字段的长度是可以正常的到2000的.



表的结构:
CREATE TABLE LOG (
       LOG_ID               NUMBER(20) NOT NULL,
       OPERATION_TYPE       VARCHAR2(64) NULL,
       OPERATION_CONTENT    VARCHAR2(4000) NULL,
       OPERATION_TIME       CHAR(14) NULL
);

详细错误信息:
15:59:46,921 WARN  [JDBCExceptionReporter] SQL Error: 1461, SQLState: 72000
15:59:46,921 ERROR [JDBCExceptionReporter] ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

15:59:46,937 WARN  [JDBCExceptionReporter] SQL Error: 1461, SQLState: 72000
15:59:46,937 ERROR [JDBCExceptionReporter] ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

15:59:46,937 WARN  [JDBCExceptionReporter] SQL Error: 1461, SQLState: 72000
15:59:46,937 ERROR [JDBCExceptionReporter] ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

15:59:46,937 WARN  [JDBCExceptionReporter] SQL Error: 1461, SQLState: 72000
15:59:46,937 ERROR [JDBCExceptionReporter] ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

15:59:46,953 ERROR [JDBCExceptionReporter] Could not execute JDBC batch update
java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeBatch(DelegatingPreparedStatement.java:231)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:126)
at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:59)
at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:56)
at net.sf.hibernate.impl.BatcherImpl.prepareBatchStatement(BatcherImpl.java:109)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:460)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:442)
at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:29)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2418)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2371)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2240)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:386)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:314)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:189)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:134)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:148)
at $Proxy121.saveUserAuth(Unknown Source)
   发表时间:2007-04-02  
有没有出现类似问题的兄弟来一起交流一下?
0 请登录后投票
   发表时间:2007-04-05  
定义type="text",Hibernate应该直接使用clob。Long有太多限制,不太好用
0 请登录后投票
   发表时间:2007-04-18  
你去oracle上下一个ojdbc14.jar,注意版本最好与数据库一致。
0 请登录后投票
   发表时间:2007-04-22  
是有这个问题,当10g的驱动用在9i上时,字符数在1001到2000之间时会报错,可能是版本不兼容吧。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics