遭遇ORA-01461

space6212發表於2019-02-01

今天接到開發人員報告:在用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章