ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 遭遇ORA-01461

遭遇ORA-01461

原创 Linux操作系统 作者:space6212 时间:2019-02-01 12:45:06 0 删除 编辑

今天接到开发人员报告:在用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字节以下,解决连问题

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63710/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 主键和外键
下一篇: 配置全文检索
请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    168538