解決SQL Error: 1461, SQLState: 72000 can bind a LONG value only
- 2020 年 1 月 22 日
- 筆記
問題
SQL Error: 1461, SQLState: 72000 can bind a LONG value only 即:SQL Error: 1461, SQLState: 72000 ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值
解決方案
mysql
暫時沒測試mysql會不會爆該錯誤,若出現類似的可以直接修改為longtext:
-- 修改用戶行為錯誤記錄中資訊欄位類型為longtext alter table sys_user_behavior_err_info modify column info longtext
oracle方案
-- 修改行為錯誤記錄表info的欄位類型方案(Oracle本身無法直接從VARCHAR2轉為clob) -- 若有DBMS_REDEFINITION(在線重定義表)許可權,亦可考慮通過DBMS_REDEFINITION更改欄位,其方法據說最安全,但步驟比較複雜。 -- 1.修改用戶行為錯誤記錄中資訊欄位類型為clob ALTER TABLE SYS_USER_BEHAVIOR_ERR_INFO add info_new clob; update SYS_USER_BEHAVIOR_ERR_INFO set info_new=info,info=null; commit; ALTER TABLE SYS_USER_BEHAVIOR_ERR_INFO modify info long; ALTER TABLE SYS_USER_BEHAVIOR_ERR_INFO modify info clob; update SYS_USER_BEHAVIOR_ERR_INFO set info=info_new,info_new=null; commit; ALTER TABLE SYS_USER_BEHAVIOR_ERR_INFO drop column info_new; -- 2.查詢到表中的索引,如:資料庫SPARKDEV中的SYS_C0051930,每個資料庫中的索引名稱可能名稱不同。 select * from user_indexes where table_name ='SYS_USER_BEHAVIOR_ERR_INFO' -- 3.對2中查詢到的index_type為NORMAL的索引執行重建,一般只有1條,若查詢為空則無需執行。此處僅是示例,以實際情況為準。當存在時若不執行2和3可能會導致存儲時報錯:ORA-01502: 索引 'SPARKDEV.SYS_C0051930' 或這類索引的分區處於不可用狀態 alter index SPARKDEV.SYS_C0051930 rebuild online;
擴展
(Clob的寫入和讀取-java)更新資料庫報錯:SQL Error: 1461, SQLState: 72000 ORA-01461: 僅能綁定要插入 LONG 列的 LONG 值