ORA-22858: 資料型別的變更無效

Hoegh發表於2015-04-07
        今天在專案中需要更改一個欄位型別,由varchar2改為blob,碰到了ORA-22858錯誤。後來透過先刪後建的方式,曲線救國,具體過程如下:
1.建立測試表HOEGH 

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> create table HOEGH(id number,name varchar2(30),loc varchar2(30));
  3.  
  4. Table created
  5.  
  6. SQL> insert into HOEGH values(1,\'Sun\',\'Huaguoshan\');
  7.  
  8. 1 row inserted
  9.  
  10. SQL> insert into HOEGH values(2,\'Zhu\',\'Gaolaozhuang\');
  11.  
  12. 1 row inserted
  13.  
  14. SQL> insert into HOEGH values(3,\'Sha\',\'Liushahe\');
  15.  
  16. 1 row inserted
  17.  
  18. SQL> commit;
  19.  
  20. Commit complete
  21.  
  22. SQL>
  23. SQL> select * from hoegh;
  24.  
  25.         ID NAME LOC
  26. ---------- ------------------------------ ------------------------------
  27.          1 Sun Huaguoshan
  28.          2 Zhu Gaolaozhuang
  29.          3 Sha Liushahe
  30.  
  31. SQL>

2.修改欄位LOC型別報錯

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> desc hoegh
  3. Name Type Nullable Default Comments
  4. ---- ------------ -------- ------- --------
  5. ID NUMBER Y
  6. NAME VARCHAR2(30) Y
  7. LOC VARCHAR2(30) Y
  8.  
  9. SQL>
  10. SQL> alter table hoegh modify(loc blob);
  11.  
  12. alter table hoegh modify(loc blob)
  13.  
  14. ORA-22858: 資料型別的變更無效
  15.  
  16. SQL>

3.刪除原有欄位LOC,新建blob欄位

點選(此處)摺疊或開啟

  1. SQL> alter table hoegh drop column loc;
  2.  
  3. Table altered

  4. SQL> alter table hoegh add loc blob;
  5.  
  6. Table altered
  7.  
  8. SQL> desc hoegh
  9. Name Type Nullable Default Comments
  10. ---- ------------ -------- ------- --------
  11. ID NUMBER Y
  12. NAME VARCHAR2(30) Y
  13. LOC BLOB Y
  14.  
  15. SQL>



疑問:
1.上述解決方案,被修改列的資料全部丟失,如果要保留資料,又該如何處理呢?
2.後來試了其他資料型別,例如,number型別改為blob型別也報錯,不明白其中深層次的原因,還請路過的不吝賜教。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1518456/,如需轉載,請註明出處,否則將追究法律責任。

相關文章