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

        记录一下自己今天遇到的一个 实际的问题,客户在使用的一个系统中,其中一张表的主键以前定义的是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);

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值