oracle-----修改已经有数据的列的数据类型

来源:互联网 发布:h5响应式企业网站源码 编辑:程序博客网 时间:2024/05/01 09:46

项目中有个表DP_GC_MS_POINT ,项目中期有个PROJECT_ID字段的类型需要从varchar(32)改为number(10)

步骤:

--1:修改PROJECT_ID 的名称为PROJECT_ID_OLD

alter table DP_GC_MS_POINT rename column PROJECT_ID to PROJECT_ID_OLD;

--2:新加一个名称为PROJECT_ID 的列,并且类型为需要修改的类型

alter table DP_GC_MS_POINT add PROJECT_ID NUMBER(10);

---3:将原来字段PROJECT_ID_OLD的数据内容拷贝到新的project_id 列上即可。注意需要类型转换处理才能赋值。

update DP_GC_MS_POINT t

   set t.project_id =to_number(t.project_id_old);

--4:删除掉原来的列PROJECT_ID_OLD

alter table DP_GC_MS_POINT drop column PROJECT_ID_OLD;

--------

批量更新的操作还可以这样操作

update DP_GC_MS_POINT t
   set t.project_id =
       (select to_number(o.project_id_old)
          from DP_GC_MS_POINT o
         where o.pay_msid = t.pay_msid)

---测试步骤

--将表备份出来

create table dp_gc_ms_point_bak    as select * from dp_gc_ms_point;

--测试时候,可以多次删除测试的表,从备份表来恢复数据对上边的sql进行调试。

drop table dp_gc_ms_point;

create table dp_gc_ms_point as select * from dp_gc_ms_point_bak;


0 0
原创粉丝点击