检查插入的值是否大于该字段数据类型约束的长度。数据库
这个异常是指,用户向数据库执行插入数据操做时,某条数据的某个字段值过长,如 果是varchar2类型的,当长度超过2000,--4000(最大值)之间的时候,oracle会自动将该字段值转为long型的,而后,插入操做失 败。解决办法是:将此字段的类型改成clob或者blob类型;oracle
可是将oracle数据库表中的varchar2类型直接改为clob类型会失败,解决办法以下:spa
一、new 一个 tableit
{table
假设咱们有如下的表格:ast
Customer 表格class
栏位名称 | 资料种类 |
First_Name | char(50) |
Last_Name | char(50) |
Address | char(50) |
City | char(50) |
Country | char(25) |
Birth_Date | datetime |
若要在这个表格上创建一个包括 First_Name, Last_Name, 和 Country 这三个栏位的视观表,咱们就打入,date
如今,咱们就有一个叫作 V_Customer 的视观表: 数据类型
V_Customer 视观表 方法
栏位名称 | 资料种类 |
First_Name | char(50) |
Last_Name | char(50) |
Country | char(25) |
}
二、通常若是表中数据不重要能够清空,跳过步骤1直接执行步骤2
执行下列代码:
alter table FILE_MANAGE modify FILEPATH long;
alter table FILE_MANAGE modify FILEPATH clob;
在进行此操做以前须要清空表中的数据,请提早备份数据,修改完成后,将数据导入便可。
实例:
防止错误发生,先备份数据库。
如下是更新表 TBL_ALERTLOG 字段 ALERTDESC 为long类型的方法,更新其它表方法同样。
1.备份原表
CREATE table TBL_ALERTLOG_BAKS
AS SELECT indexid, ALERTLEVEL,ALERTCATEGORY, ALERTDESC,starttime,endtime,isnew,TERMINALID,userid,AlertFlag from TBL_ALERTLOG;
2.清空更新的表字段
update TBL_ALERTLOG set ALERTDESC = null;
3.修改表字段类型
alter table TBL_ALERTLOG modify ALERTDESC long;
在从long转化为clob,对于LONG类型,无论有没有数据存在,
能够直接修改成CLOB类型
alter table TBL_ALERTLOG modify ALERTDESC clob;
4.更新目标字段为备份数据(恢复原数据)
update TBL_ALERTLOG set ALERTDESC = (SELECT ALERTDESC FROM TBL_ALERTLOG_BAKS aa WHERE TBL_ALERTLOG.INDEXID = aa.INDEXID)
注:clob不需指定长度。