li
  当前位置:主页 > 性能优化 > 文章内容
li
案例分析:ORA-01461错误
来源: www.ixdba.net  作者: Oracle+Linux专业技术门户    时间:2007-12-31   阅读:40  

ORA-01461 错误

can bind a LONG value only for insert into a LONG column

案例1

我的ORACLE表里没有long字段,可是保存时报错:

ORA-01461 :仅可以为插入LONG列的LONG值赋值
IXDBA.NET技术社区
本来我这张表里只有一个VARCHAR24000)的字段,一直没有这种错误发生,后来我把另一个字段长度调整为VARCHAR2(4000),这错误就开始发生了。

 

你的数据库字符集可能是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2LONG字段,所以报错。
建议减小字段长度或拆分

案例2

今天接到开发人员报告:在用jdbc导入数据时遇到ORA-01461
ORA-01461 can bind a LONG value only for insert into a LONG column

Cause: An attempt was made to insert a value from a LONG datatype into another datatype. This is not allowed.

Action: Do not try to insert LONG datatypes into other types of columns.

这个错误一般发生在插入或者更新Varchar2类型的字段


实际引起这个错误的主要原因是字符集问题及字符串长度到原因,根据本人遇到到情况一共分两种:
1
、插入到字符串长度大于4000字节
2
、插入到表中的记录其中一个是long类型、还有其他实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串

用以下SQL可以查出有可能引起ORA-01461错误的表:
SELECT * FROM
(SELECT TABLE_NAME, OWNER, count(*) NUM
FROM DBA_TAB_COLUMNS
WHERE DATA_TYPE='LONG'
OR (( DATA_TYPE='VARCHAR2'
or DATA_TYPE='CHAR'
or DATA_TYPE='NVARCHAR2'
or DATA_TYPE='NCHAR')
AND DATA_LENGTH > 1333)
AND OWNER NOT IN
('SYS','SYSTEM','SH','OLAPSYS','MDSYS','WKSYS','ODM','XDB','WMSYS')
GROUP BY TABLE_NAME, OWNER)
WHERE NUM > 1

在本例中,更好是插入到记录有2个字段长度大于2000,由于数据库字符集不可更改,故结合实际业务逻辑,将插入记录到其中一个字符串长度缩减在2000字节以下,解决连问题.




  上一篇: 案例分析:ORA-01178错误释疑   下一篇: 案例分析:ORA-12500错误案例
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·案例分析:ORA-01178错误释疑
·案例分析:ORA-01000: maximum o...
·案例分析:ora-04031与ora-04030...
·oracle大师谈:OS与oracle异同探...
·问题释疑:如何配置才能使客户端...
·32bit oracle 扩展SGA原理
·强烈推荐:oracle10g+rac配置sta...
·关于数据库open的深入探究
·oracle优化:oracle诊断性能问题
·强烈推荐:ORACLE学习笔记--性能优...
·案例分析:ORA-12500错误案例
·案例分析:ORA-25153: Temporary...
·Oracle优化经典文章--磁盘I/O和碎...
·oracle问题小结一:ORACLE常见错...
·Java用OCI驱连Oracle数据库的实现...
·Oracle数据库ASM功能详解
·阿里巴巴公司DBA笔试题
·案例解决:一次oracle掉电的处理...
·我的oracle笔记,欢迎收看!
·如何确定导致刷新组刷新失败的物...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接