ORACLE中将一列已有数据的字段类型进行改变的解决方案

来源:互联网 发布:java中锁的种类 编辑:程序博客网 时间:2024/04/29 06:28

        记录一下自己今天遇到的一个 实际的问题,客户在使用的一个系统中,其中一张表的主键以前定义的是Number型,通俗来说就是数字 类型。主键使用序列进行生成的,后来在代码重构以后,主键改为随机生成的一个16位的字符串。将字符串类型的数据往Number类型的字段里面插入时,是会报错的。第一反应就是去数据库将Number类型改成varchar类型,但是在改的时候,会提示你要修改数据类型,则要修改的列必须为空。那么问题来了,如何将一列已有数据的字段类型进行改变呢?

        现在来仔细说一下问题的解决方案,操作如下:

        1.在操作数据库的时候一定要谨慎,所以首先我们先将这张表进行备份,create table  新建的表名  as select * from table(注意某些字段是有默认值的,不要掉)

      2.将要修改类型的字段进行重命名,alter table  表名 rename column DBID to DBID1;(将 主键dbid重命名为dibid1)

      3.在表中新建一个原来的字段,ALTER TABLE 表名 ADD DBID  VARCHAR2(100); 

      4.将原来那一列的数据进行类型转换后给现在的字段,UPDATE 表名 t SET t.dbid = to_char(t.dbid1); 

      5.删除原来的字段,ALTER TABLE y_ent_cert  DROP COLUMN dbid1; 

      6.将现在的dbid设为主键,alter table 表名 add constraint pk_id primary key(id);

再次提醒,数据操作需谨慎,切记做好备份。。。

0 0