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


感謝原作者:http://blog.163.com/zhchf_52@yeah/blog/static/67822974201081710812218/

 

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

這個異常是指,用戶向數據庫執行插入數據操作時,某條數據的某個字段值過長,如果是varchar2類型的,當長度超過2000,--4000(最大值)之間的時候,oracle會自動將該字段值轉為long型的,然后,插入操作失敗。解決辦法是:將此字段的類型改為clob或者blob類型;

但是將oracle數據庫表中的varchar2類型直接改成clob類型會失敗,解決辦法如下:new 一個Sql view,執行下列代碼:

alter table A modify column_a long;

alter table A modify column_a clob;

在進行此操作之前需要清空表中的數據,請提前備份數據,修改完成后,將數據導入即可。

注:clob不需指定長度。

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

關於錯誤的其他原因
當向ORACLE數據庫中插入或更新數據時,報錯“ORA-01461: 僅可以為插入 LONG 列的 LONG 值賦值”,可能有以下幾種原因:
1、插入到字符串長度大於4000字節。
2、插入到表中的記錄的某個字段數據的實際長度大於2000個字節(如果是UTF-8,則是1333個字節);或者是插入的記錄中有兩個或兩個以上長度大於2000字節的字符串。
3、數據庫與客戶端的JDBC驅動不匹配。
對於UTF-8或歐洲的某些字符集,oracle在存儲時,對於一個字符需要2個或3個字節的存儲空間,雖然表定義中為varchar2(4000),但是其實該字段的data_length為其2倍或3倍長。這種情況下oracle會把data_length長度超過4000的當做LONG型處理,你的表中有兩個這樣的字段,插入數據時相當於同時操作2個LONG字段。

最近在項目中僅常遇到,在這家客戶那里郵件發送沒問題,可是跑到另外一家客戶那里缺發不出去,覺得很奇怪,通過一番折騰之后,把問題落在了Oracle JDBC Driver上,因為在客戶現場,用的oracle版本不統一,有些客戶使用的是oracle9i,有些使用的是Oracle10g,但是項目中同意使用了ojdbc14.jar做為驅動,那當然就有問題了,以下列出在2個驅動之間的區別:

    1.oracle10g中將中文字符解析為3個字節,oracle9i中保留為2個字節,在插入時常常會因為這個問題而造成數據插入失敗、超常
    2.在處理大字符集的時候,同樣存在字符限制,class12只能支持到3000左右吧,ojdbc14可以支持到更長
http://hikin.javaeye.com/blog/548945
oracle 10g 幾個版本jdbc驅動下載
文章分類:數據庫
為了避免開發中不必要的麻煩,推薦用最新的版本 Oracle 10g 10.2.0.4 JDBC_classes12.jar
如新的版本 可以解決 c3p0的警告和MyEclipse hibernate生成文件等問題
org.hibernate.exception.GenericJDBCException: Could not get list of tables from database. Probably a JDBC driver problem.
Oracle_10g_10.2.0.4_JDBC_classes12.jar(1.5 MB)
Oracle_10g_10.2.0.4_JDBC_ojdbc14.jar (1.5 MB)
Oracle_10g_10.1.0.2_JDBC_classes12.jar (1.4 MB)
Oracle_10g_10.1.0.2_JDBC_ojdbc14.jar (1.3 MB)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM