前言:近期迁移工作中,有些表的列数据类型太小,如下即为一例
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,在生产中要评估此类操作的可行性