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

 第二种方法:通过新建表,在新表上更改字段,最后rename新表来完成

 

22:41:44 SQL> create table t1 as select * from t where 1=2;

 

表已创建。

 

22:42:14 SQL> alter table t1 modify (a number);

 

表已更改。

 

22:42:24 SQL> insert into t1 select * from t;

 

已创建 1 行。

 

22:42:37 SQL> commit;

 

提交完成。

 

22:42:40 SQL> drop table t;

 

表已删除。

 

22:42:46 SQL> rename t1 to t;

 

表已重命名。

 

22:43:00 SQL> desc t;

 

名称 是否为空? 类型

 

-------------- --------- -------------

 

A NUMBER

 

我就知道这两种常见的方法,不知道还有没有什么其他的好方法。如果有,请分享。建议使用第一种。

 

约束和索引都被摧残了,可以做个实验证明一下。

 

先建立测试表并插入数据

15:28:45 SQL> create table t (a varchar2(10) not null);

表已创建。

已用时间: 00: 00: 00.03

15:28:47 SQL> insert into t values ('10');

已创建 1 行。

已用时间: 00: 00: 00.00

15:28:55 SQL> commit;

提交完成。

已用时间: 00: 00: 00.00

 

 

 

然后增加一个列,并且把数据复制过去

15:29:08 SQL> alter table t add (b number);

表已更改。

已用时间: 00: 00: 00.01

15:29:31 SQL> update t set b=to_number(a);

已更新 1 行。

已用时间: 00: 00: 00.01

15:29:42 SQL> commit;

提交完成。

已用时间: 00: 00: 00.00

15:29:45 SQL> alter table t modify b not null;

表已更改。

已用时间: 00: 00: 00.10

 

 

 

在原来的列上建立索引和约束

15:29:59 SQL> create index ind_t_a on t(a);

索引已创建。

已用时间: 00: 00: 00.15

15:31:01 SQL> alter table t add constraint uk_t_a unique(a);

表已更改。

已用时间: 00: 00: 00.03

 

 

 

斗转星移:

15:31:20 SQL> alter table t drop column a;

表已更改。

已用时间: 00: 00: 01.20

15:32:06 SQL> alter table t rename column b to a;

表已更改。

已用时间: 00: 00: 00.03

 

 

 

查看索引是否还在?可以看到索引已经被损坏了:

15:33:17 SQL> select index_name,status from user_indexes where table_name='T';

未选定行

已用时间: 00: 00: 00.12

15:34:20 SQL> select index_name,status from user_indexes order by 1;

INDEX_NAME STATUS

------------------------------ --------

PK_DEPT VALID

PK_EMP VALID

已用时间: 00: 00: 00.35

 

 

 

然后查看约束是否还在?可以看到它也被摧残了

15:38:07 SQL> select constraint_name,constraint_type,invalid,table_name from user_constraints where table_name='T';

CONSTRAINT_NAME CONSTRAINT_TYPE INVALID TABLE_NAME

------------------------------ -------------------- ------- -----------

SYS_C005423 C T

已用时间: 00: 00: 00.03

15:38:24 SQL> select constraint_name,constraint_type,invalid,table_name from user_constraints;

CONSTRAINT_NAME CONSTRAINT_TYPE INVALID TABLE_NAME

------------------------------ -------------------- ------- ------------

BIN$lNdA2W97SK69TBAu945o7w==$0 C BIN$W9ZnSgtTS9+Fs/438TqKuA==$0

BIN$6JXde6KdTsum1GYM3py1eg==$0 C BIN$W9ZnSgtTS9+Fs/438TqKuA==$0

SYS_C005423 C T

FK_DEPTNO R EMP

PK_DEPT P DEPT

PK_EMP P EMP

已选择6行。

已用时间: 00: 00: 00.23

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

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