oracle无法修改字段类型,Oracle如何修改字段类型呢? 爱问知识人

在实际的工作和学习中,我们可能由于疏忽将一个字段定义为varchar2类型,后来插入里面的数据又都是数字,在此之后,你会突然发现这个字段确实应该为number类型,而此时如果我们想在不影响用户使用的前提下,或者说尽量小的影响用户,保证数据不丢失的情况下,来更改这个数据类型,这个时候如果我们用普通的alter table modify命令,就可能要遇到错误了。

示例如下: 22:25:31 SQL> select * from t; A ---------- 10 22:25:32 SQL> desc t 名称 是否为空? 类型 -------------------- --------- -------------------- A VARCHAR2

(10) 22:25:34 SQL> alter table t modify(a number); alter table t modify(a number) * 第 1 行出现错误: ORA-01439: 要更改数据类型, 则要修改的列必须为空 其实,类似的现象确实很多,如本来应该为date类型,结果被定义成varchar2类型等等,主要就是那些兼容的数据类型之间的转换定义。

当然,为什么一开始会犯这样的错误,那可能原因就有多方面了,如一开始需求就不对等等。 下面,以上面那个例子为基础,介绍两种处理这种问题的方法。 第一种方法,通过增加列来完成 22:25:44 SQL> alter table t add (b number); 表已更改。

22:34:16 SQL> update t set b = to_number(a) 已更新 1 行。 22:34:39 SQL> update t set a = null; 已更新 1 行。 22:34:50 SQL> commit; 提交完成。

22:34:52 SQL> select * from t; A B ---------- ---------- 10 22:34:55 SQL> alter table t modify a number 表已更改。 22:35:21 SQL> update t set a=b; 已更新 1 行。

已用时间: 00: 00: 00。01 22:35:33 SQL> commit; 提交完成。 22:35:52 SQL> alter table t drop column b; 表已更改。 在这种方法中最后也可以先drop column a,然后rename column b to a,达到的效果是一样的。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值