clob在oracle 10g 和oracle 9i clob 的区别

http://wdmcln.iteye.com/blog/153606

 

最近,在做历史数据迁移项目时,用hibernate3.2 插入clob时,总会出现
Xml代码 复制代码
  1. <SPAN style="FONT-SIZE: x-small">ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值</SPAN>  
ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

 刚开始的时候以为是程序问题,首先从程序入手解决,然后根据错误提示信息,再从网上搜所相关资料,有的说是oracle驱动的bug,还有说是oracle dbManager设置问题,比如参数设置,约束等等,但这都不是问题的根本!后来,通过查看hibernate日志发现,在oracle10g 插入clob和oracle9i插入clob会出现不同的情况

 1.Oracle 10 g

Java代码 复制代码
  1. Hibernate.createClob(/*直接插入超长字符*/)  
Hibernate.createClob(/*直接插入超长字符*/)
Java代码 复制代码
  1. 正常插入,看来10g已经解决clob超大字符的限制  
正常插入,看来10g已经解决clob超大字符的限制

2.Oracle 9 i

Java代码 复制代码
  1. Hibernate.createClob(/*直接插入超长字符*/)  
Hibernate.createClob(/*直接插入超长字符*/)
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: x-small">不能正常插入,会出现<SPAN>ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值,经过</SPAN></SPAN>  
不能正常插入,会出现ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值,经过
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: x-small">一次次的测试,发现当</SPAN>  
一次次的测试,发现当
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: x-small">Hibernate.createClob("")的情况是正常插入</SPAN>  
Hibernate.createClob("")的情况是正常插入
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: x-small">看来9i是需首先创建一个emptyClob,创建自身的游标,才能正常插入的</SPAN>  
看来9i是需首先创建一个emptyClob,创建自身的游标,才能正常插入的

你可能感兴趣的:(java,oracle,Hibernate,xml,Blog)