oracle如何變更varchar2型別的列為clob

wisdomone1發表於2012-11-07
前言:近期遷移工作中,有些表的列資料型別太小,如下即為一例
SQL> create table t_varchar2_to_clob(a varchar2(100));
表已建立。
SQL> insert into t_varchar2_to_clob values('zxy');
已建立 1 行。
SQL> commit;
提交完成。
--經測:varchar2的空或實列皆不能變更為clob型別
SQL> alter table t_varchar2_to_clob modify a clob;
alter table t_varchar2_to_clob modify a clob
                                      *
第 1 行出現錯誤:
ORA-22858: 資料型別的變更無效

--如下采用過渡方法
SQL> create table t_varchar2_to_clob(a varchar2(10));
表已建立。
SQL> insert into t_varchar2_to_clob values('zxy');
已建立 1 行。
SQL> insert into t_varchar2_to_clob values('zxy1');
已建立 1 行。
SQL> insert into t_varchar2_to_clob values('zxy12');
已建立 1 行。
SQL> insert into t_varchar2_to_clob values('zxy123');
已建立 1 行。
SQL> commit;
提交完成。
SQL> select * from t_varchar2_to_clob;
A
----------
zxy
zxy1
zxy12
zxy123
--新增一個新列
SQL> alter table t_varchar2_to_clob add b clob;
表已更改。
SQL> col a for a10
SQL> col b for a10
SQL> r
  1* select * from t_varchar2_to_clob
A          B
---------- ----------
zxy
zxy1
zxy12
zxy123
--把源列的資料遷移到新列
SQL> update t_varchar2_to_clob set b=a;
已更新4行。
SQL> commit;
提交完成。
--檢視源與新列是否資料一致
SQL> select a,b from t_varchar2_to_clob;
A          B
---------- ----------
zxy        zxy
zxy1       zxy1
zxy12      zxy12
zxy123     zxy123
--刪除源列
SQL> alter table t_varchar2_to_clob drop column a;
表已更改。
--把新列改名為源列
SQL> alter table t_varchar2_to_clob rename column b to a;
表已更改。
--檢視變更後的表
SQL> desc t_varchar2_to_clob;
 名稱                                                  是否為空? 型別
 ----------------------------------------------------- -------- --------------
--------------------
 A                                                              CLOB
小結:1,上述操作適用於開發環境
           2,在生產中要評估此類操作的可行性

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

相關文章