oracle 修改字段类型的方法

本文介绍了一种在不更改列名且避免行迁移的情况下调整数据库表中字段精度的方法,适合于有大量数据的情况。通过添加临时字段并进行数据迁移,再修改原始字段的精度,最后删除临时字段,整个过程分为多个步骤以减少对应用程序的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要是没有数据的话直接用以下语句即可

alter   table  tb_test  modify permile  number(5,2);

但是有数据的话 就不能用上面方法了,

alter table tb_test add permile_temp number(5,2)

update tb_test set  permile_temp=permile;

alter table drop column permile;

alter  table test rename column  permile_temp to permile;

这种方法会使列名发生变化,而且字段顺序增加 有可能发生行迁移,对应用程序会产生影响

以下方法是比较好的方法

不用使列名发生变化 也不会发生表迁移,但这个有个缺点是表要更新两次

如果数据量较大的话 产生的undo和redo更多 ,前提也是要停机做

要是不停机的话 ,也可以采用在线重定义方式来做 

以下是脚本:

alter table tb_test  add permile_temp number;ITPUB个人空间4] H$/H-c3YF
-- Add/modify columns ITPUB个人空间9W gQ%?T.Y
alter table  tb_test  modify PERMILE null;ITPUB个人空间k8DR3IfU"P$p
update  tb_test  set permile_temp=permile,permile=null;
&`rS,nL8A0commit;ITPUB个人空间5N8U,gh+S"c7^ m
alter table  tb_test  modify permile number(5,2);ITPUB个人空间W,nq&a%{ kt
update  tb_test  set permile=permile_temp,permile_temp=null;ITPUB个人空间+AW"E,otv,|tDB4m
commit;
1lUT3g(k0alter table  tb_test  drop column permile_temp;
7V r3z&|:t'Zz#_Ur0alter table  tb_test  modify PERMILE not null;
~/e7B|fI%o5_J0select * from  tb_test ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值