2014年3月13日 星期四

ORACLE ORA-22858 問題

在oracle 想要把VARCHAR2轉CLOB卻出現了「ORA-22858 invalid alteration of datatype」錯誤
主要是因為oracle不允某些類型的欄位修改。就是不可以將欄位類型修改為:object、REF、nested table、VARRAY、 CLOB、BLOB。
解決方式如下:[1]
 1、將欄位a改名為a_copy 
 2、新建一個欄位a,用正確的類型 
 3、將_a欄位中的數據經一定轉換(一般要做轉換的,因為類型變了)后插入了a欄位中 
 4、刪除_a欄位 
 如果無需保留數據只要1、2、3步就可以了。 
 如果表中或該欄位中還沒有數據,那就更簡單了,把那個欄位刪除再以正確的數據類型新建一個即可。 

或者

1.[2]
alter table table_name add column_new number;
update table_name set  column_new=column_old;
alter table table_name drop column column_old;
alter table table_name rename column  column_new to column_old;

資料來源:
[1] http://www.010cnc.net/subject/about/ORA-22858%E6%9C%89%E9%97%9C%E5%95%8F%E9%A1%8C%E8%A9%B3%E8%A7%A3.html
[2] http://hi.baidu.com/honeysnail/item/76e6725dcd39fd3094eb0579