ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 删除表的某一列时报 39726错误

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

原创 Linux操作系统 作者:walking_rain 时间:2012-05-28 23:54:52 0 删除 编辑
今天同事在删除表字段的时候时候报这样的错误。 数据库版本    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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 别在玩了
请登录后发表评论 登录
全部评论

注册时间:2012-04-11

  • 博文量
    3
  • 访问量
    11862