問題背景
郵箱表PH_MAILINFO的內(nèi)容(mailcontent)字段大小設(shè)置為varchar2(4000)
當(dāng)向mailcontent字段中插入的數(shù)值大于2000時(shí) 便會(huì)拋出 Cause: java.sql.SQLException: ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException
原因:
指用戶向數(shù)據(jù)庫執(zhí)行插入數(shù)據(jù)操作時(shí)奈揍,某條數(shù)據(jù)的某個(gè)字段值過長,如果是varchar2類型(最大長度為4000字節(jié))的赋续,當(dāng)長度超過2000--4000(最大值)之間的時(shí)候男翰,oracle會(huì)自動(dòng)將該字段值轉(zhuǎn)為long型的,插入操作失敗纽乱。
解決方法:
一:從代碼中解決:若插入該字段的數(shù)據(jù)過多 則只取2000長度的數(shù)據(jù) substring(0,2000)
二:從數(shù)據(jù)庫中解決:將此字段的類型改為clob或者blob類型蛾绎;
但是將oracle數(shù)據(jù)庫表中的varchar2類型直接改成clob類型會(huì)失敗,解決辦法如下:new 一個(gè)Sql view,執(zhí)行下列代碼:
alter table table_name modify col_name long;
alter table table_name modify col_name clob;
在進(jìn)行此操作之前需要先備份表的數(shù)據(jù)租冠,然后清空表中的數(shù)據(jù)鹏倘,再修改表的字段屬性,最后將數(shù)據(jù)導(dǎo)入即可顽爹。
報(bào)錯(cuò)的截圖: