最近在做一个校验的功能,在数据库端校验并拼接报错信息的时候,发生了这样一个错误,经过排查得到是select的字符串太长,Oracle将其自动转成了CLOB类型,而业务中需要在这后面拼接了一个字符串,来得到更完善的提示信息。
因此会报“数据类型不一致,后面的字符串与前面的CLOB类型不符”!!
解决办法很简单:将后面的字符串转换为CLOB类型,方法:to_clob('')
最后运行出来的结果就是一个正常的CLOB了
思考:
针对上面遇到的问题,对CLOB和Varchar2类型的知识查询了一下,得到:
当查询中的字符串长度超过4000个字符时,Oracle就会自动将这个字符串转为CLOB(文本)类型 ,此时如果后续的操作还当作varchar2来处理,就会遇到数据类型不一致的报错。
除此之外,还有
1、插入数据库(报长度不够)
当插入数据库的字符类型为CLOB,而数据库中的字段为varchar2时:
就需要将数据库中的varchar2类型修改为CLOB。
而这时会遇到varchar2修改CLOB不成功的现象,这个时候可以新建一个CLOB的字段,将之前varchar2字段里的值,update到这个字段中,然后删掉varchar2字段,将这个字段修改为原字段的字段名。
会有一些文章中建议先将varchar2修改为Long,再修改为CLOB。我试过这种情况不可以,写下来 给其他读者作为参考,如果可行,也不失为一个方法。
2、数据查询(报数据类型不一致)
这种情况就要根据自己的业务情况,去适当的做CLOB转换,查询与拼接中的字符都要做CLOB转换,保持数据类型一致,就不会出现上面的情况了