实例讲解如何更改字段至兼容的不同类型(1)
作者:Alice 出处:赛迪网 更新时间:2008-07-03 责任编辑:seward
 
 

在实际的工作和学习中,我们可能由于疏忽将一个字段定义为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,达到的效果是一样的。

 
     
 
 
继续>>Oracle
[第1页][第2页][下一页]
 
内容导航  
第1页实例讲解如何更改字段.. 第2页Oracle
上一篇 : Oracle用户密码含有特殊.. 下一篇实例讲解如何更改字段至..
 
  您要为所发表的言论的后果负责,请各位遵纪守法并注意文明用语
标题:  

[ 关于本站 ] [ 广告服务 ] [ 商务合作 ] [ 联系我们 ] [ 合作伙伴 ] [ 法律顾问 ] [ 网站地图 ]
千橡公司 京ICP证041489号 Copyright (c) 1997-2007 All Right Reserved.