ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值

檢查插入的值是否大於該字段數據類型約束的長度。數據庫

這個異常是指,用戶向數據庫執行插入數據操做時,某條數據的某個字段值過長,如 果是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

 

CREATE VIEW V_Customer
AS SELECT First_Name, Last_Name, Country
FROM Customer;

如今,咱們就有一個叫作 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不需指定長度。

相關文章
相關標籤/搜索