1. 程式人生 > >Oracle Error:ORA-01465: 無效的十六進位制數字【解決辦法】

Oracle Error:ORA-01465: 無效的十六進位制數字【解決辦法】

如圖下面的錯誤,當讓表中插入資料時,報一下錯誤。
這裡寫圖片描述

解決辦法:

1、修改表結構,待插入資料後再修改回來

這個方法就是你把BLOB型別的那個欄位修改為合適的,然後再插入,最後再修改表結構,是不是比較折騰。這個我試了下:通過sql語句修改以下表BLOB型別為VARCHAR(100),然後報以下錯誤:ORA-00054
這裡寫圖片描述
這個問題原來是有多個窗口占用這個表資源導致的,那麼關掉跟它有關的,然後繼續執行sql語句

alter table DDM_DATAMODULE modify dm_content VARCHAR2(100)
好吧這次又有這樣的錯誤了ORA-22859
這裡寫圖片描述
網上一搜,給的答案是:
BLOB是打欄位,大欄位比較特殊,不能隨便轉換型別。類似的如果存在資料在型別變化時也會有限制的。所以必須先刪除表再建立,建立的時候修改型別就好了。
到了這裡,我已經受夠了,不想通過修改表結構來折騰了,而且還請注意:這是在你表中沒有資料的情況下這麼整,想想要是表中資料很多,你估計上面的動作都不會做了。。。

這裡網上摘錄了關於修改資料庫欄位型別的內容如下:
Oracle修改欄位型別方法總結

有一個表名為tb,欄位段名為name,資料型別nchar(20)。

1、假設欄位資料為空,則不管改為什麼欄位型別,可以直接執行: alter table tb modify (name
nvarchar2(20));

2、假設欄位有資料,則改為nvarchar2(20)可以直接執行: alter table tb modify (name
nvarchar2(20));

3、假設欄位有資料,則改為varchar2(40)執行時會彈出:“ORA-01439:要更改資料型別,則要修改的列必須為空”,這時要用下面方法來解決這個問題:

/修改原欄位名name為name_tmp/ alter table tb rename column name to name_tmp;

/增加一個和原欄位名同名的欄位name/ alter table tb add name varchar2(40);

/將原欄位name_tmp資料更新到增加的欄位name/ update tb set name=trim(name_tmp);

/更新完,刪除原欄位name_tmp/ alter table tb drop column name_tmp;

總結: 1、當欄位沒有資料或者要修改的新型別和原型別相容時,可以直接modify修改。
2、當欄位有資料並用要修改的新型別和原型別不相容時,要間接新建欄位來轉移。