删除表的某一列时报 39726错误

今天同事在删除表字段的时候时候报这样的错误。 数据库版本    ORACLE 10.2.0.1                 
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作。给出的错误提示很明显知道是什么问题。不能对压缩表进行DDL的删除操作。查询USER_TABLES数据字典发现该不是压缩表。
 
下面在本机上演示一下。
 
1,创建一张普通的表并进行删除字段操作:
 
scott@DILM>create table test_com (id int,name varchar2(10));
表已创建。
scott@DILM>alter table test_com drop column id;
表已更改。
没问题
 
2,将表改为压缩表
 
scott@DILM>alter table test_com add id int;
表已更改。
scott@DILM>alter table test_com compress;
表已更改。
scott@DILM>select A.TABLE_NAME,A.COMPRESSION
  2  from user_tables a
  3  where a.table_name='TEST_COM';
TABLE_NAME                     COMPRESS
------------------------------ --------
TEST_COM                       ENABLED

3,模仿删除

scott@DILM>alter table test_com drop column id;
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
4,将表修改为非压缩表,再进行删除操作:
 
scott@DILM>alter table test_com nocompress;
表已更改。
scott@DILM>select table_name,compression
  2  from user_tables
  3  where table_name='TEST_COM';
TABLE_NAME                     COMPRESS
------------------------------ --------
TEST_COM                       DISABLED
scott@DILM>alter table test_com drop column id;
alter table test_com drop column id
 第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
将压缩表修改成非压缩表之后居然报相同的错误
尝试一下能不能增加字段
scott@DILM>alter table test_com  add address varchar(20);
表已更改。
可以看出增加字段是可以的, 再想一下,能不能增加默认值的字段:

scott@DILM>alter table test_com  add  shuxing varchar(20) default 'compress';
alter table test_com  add  shuxing varchar(20) default 'compress'
  第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
我了个去,报错。
 
5,该错误解决方法:
 
上网上搜索了一下,吸收成了自己的小知识(网络真好)
将要删除的字段置为UNUSED COLUMN 再进行删除。
scott@DILM>alter table test_com drop column id;
alter table test_com drop column id
第 1 行出现错误:
ORA-39726: 不支持对压缩表执行添加/删除列操作
scott@DILM>alter table test_com set unused column id;
表已更改。
scott@DILM>alter table test_com drop unused columns;
表已更改。
 
通过以上测试总结一下:非压缩表置成压缩表之后,不能进行字段的删除操作,可以增加没有默认值的字段操作;将压缩属性去掉之后DROP,ADD操作报相同的错误。要达到目的, 首先把要删除的字段置成UNUSED再进行DROP.
 
上述针对的ORACLE版本为10.2.0.1 今天中午在公司的10.2.0.5版本数据库测试,发现有不同的结果。
 
压缩的表变成非压缩表的修改方法不一致,结果不同:
 
alter table test1  nocompress; --修改完后,不能进行后续的删除字段操作。
 
alter table test2 move nocompress;--执行之后,可以进行后续的删除字段操作。
 
不明白这两条语句有什么不同,不都是解压表吗?
 
以上为一己之见,有不同意见者,希望指出。

 

 

 


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26873192/viewspace-731337/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26873192/viewspace-731337/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值