本文主要是介绍ORA-01461:仅能绑定要插入 LONG 列的 LONG 值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ORA-01461:仅能绑定要插入 LONG 列的 LONG 值
目录:
1.问题描述
2.解决思路及其他
3.问题原因
4.处理办法
5.延伸知识
6.相关参考
1.问题描述
1.1环境描述:
数据库环境 数据库:Oracle 11 g rac环境
测试人员在测新功能时,后台日志报错
1.2报错日志:
2.解决思路及其他
2.1.查看测试人员测试什么功能,前台会有什么异常。插入的表的相关内容
2.2.查找官方文档对该问题的说明 然而并没有任何说明
2.3.查找线上及MOS对该问题的原因描述及解决方案
当向ORACLE数据库中插入或更新数据时,报错“ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”,可能有以下几种原因:
1、插入到字符串长度大于4000字节。
2、插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串。
3、数据库与客户端的JDBC 驱动不匹配。对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为 varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过 4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段。
4、使用9i的及以下的版本引发的bug. 10.1.0.1版本中已经修复bug
3.问题原因
发现该场景出现该问题的原因是,测试时,要插入表,某字段长度超过4000。而该字段类型为varchar2,最大长度为4000。超过最大限制。属于原因1
异常是指用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是varchar2类型(最大长度为4000字节)的,当长度超过2000–4000(最大值)之间的时候,oracle会自动将该字段值转为long型的,插入操作失败。
4.处理办法
临时解决办法:输入长度减少,使之小于4000.
推荐解决办法:修改该字段类型。
5.延伸知识
LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列
LONG RAW : 可变长二进制数据,最长2G
CLOB : 字符大对象Clob 用来存储单字节的字符数据
NCLOB : 用来存储多字节的字符数据
BLOB : 用于存储二进制数据
BFILE : 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复。
其 中CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制。
要保存图片、文本文件、Word文件各自最好采用哪种数据类型呢?BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用BLOB。
6.相关参考
http://blog.itpub.net/751371/viewspace-716886/
http://blog.163.com/zhchf_52@yeah/blog/static/67822974201081710812218/
http://peak.iteye.com/blog/232522
http://blog.csdn.net/bisal/article/details/39545463
这篇关于ORA-01461:仅能绑定要插入 LONG 列的 LONG 值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!