ORACLE中2种删除列的方法
alter table qq drop column TIME
alter table qq set unused ("TIME") cascade constraints;(注意TIME为字段名,要大写)
第一个命令直接删除一个列,适合应付比较小的表,
第二个命令将一个列标识为unused
然后在系统负载比较轻的时候使用
alter table drop unused columns
删除该列占用的存储空间。
可以使用参数指定一次删除多少行
适合负载比较重,或者表比较大的情况
修改表结构的命令由ALTER TABLE来完成。该命令的参数较多,下面仅给出一些基本的部分。详细请参考《ORACLE8i SQL REFERENCE》 。
ALTER TABLE [user.] table
[ADD ({colum_element|table_constraint}
[,{column_element|table_constraint}]...)]
[MODIFY(column_element[,column_element]...)]
[DROP CONSTRAINT constraint]...
[PCTFREE integer][PCTUSED integer]
[INITRANS integer][MAXTRANS integer]
[STORAGE storage]
[BACKUP]
ALTER TABLE 可以作的操作有:
增加一个列(字段)宽度;
减少一个列(字段)宽度(该列必须无数据);
增加一个列(字段);
修改列的定义 ;
或一个限制;(如数据类型,NOT NULL);仅当某列的值为空时才能修改其类型;
去掉限制;
修改存储分配;
记录表已作过BACKUP;
删除已存在的列(仅Oracle8i及以后版本);
重新定位和组织表(仅Oracle8i及以后版本);
将表标识为不可用(仅Oracle8i及以后版本)。
例1:对已经存在的表增加一新的列:
SQL>alter table dept add ( headcount number(3) );
例2:对表的列修改其大小:
SQL>alter table dept modify( Dname char(20) );
例3:复制一个表:
CREATE TABLE HOLD_TANK AS SELECT TANK_NO, CHIEF_CARETAKER_NAME FROM TANK;
例4:参照某个已存在的表建立一个表结构(不需要数据)
create table emp2 as select * from emp where rownum<1;
例5:修改已存在表存储参数:
Alter table emp2 storage( next 256k pctincrease 0 );
例6:删除表中的列:
这是Oracle8i的新功能,它的基本语法为:
ALTER TABLE . . . . . . DROP COLUMN [ CASCADE CONSTRAINTS ];
如:
Alter table emp drop column comm ;
例7:重新定位和组织表:
这是Oracle8i的新功能,可以实现:
将未分区的 表从一个表空间移到另一个表空间;
重新组织一个未分区表的存储。
它的基本语法为:
ALTER TABLE . . . . . . MOVE TABLESPACE ;
如:
Alter table emp move tablespace users;
例8:将表标识为不可用:
这是Oracle8i的新功能,可以实现对空间的收回等。
基本语法为:
ALTER TABLE . . . . . . SET UNUSED COLUMN;
如:
Alter table emp set UNUSED COLUMN xyz;