在本教程中,将学习如何使用oracle drop column
语句从表中删除一个或多个列。
从大表中删除列的过程可能耗费时间和资源。 因此,通常使用alter table set unused column
语句来逻辑删除列,如下所示:
alter table table_name
set unused column column_name;
当执行了该语句,该列就不再可见。在非高峰时段,可以使用以下语句在物理上删除未使用的列:
alter table table_name
drop unused columns;
如果要减少累积的撤消日志量,可以使用checkpoint
选项,该选项在指定的行数已被处理后强制检查点。
alter table table_name
drop unused columns checkpoint 250;
下面来创建一个名为suppliers
的示例表:
-- 12c语法
create table suppliers (
supplier_id number generated by default as identity,
contact_name varchar2(255) not null,
company_name varchar2(255),
phone varchar2(100) not null,
email varchar2(255) not null,
fax varchar2(100) not null,
primary key(supplier_id)
);
以下语句将示例数据插入到suppliers
表中:
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('solomon f. zamora',
'elit llp',
'1-245-616-6781',
'enim.condimentum@pellentesqueeget.org',
'1-593-653-6421');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('haley franco',
'ante vivamus limited',
'1-754-597-2827',
'nunc@ac.com',
'1-167-362-9592');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('gail x. tyson',
'vulputate velit eu inc.',
'1-331-448-8406',
'sem@gravidasit.edu',
'1-886-556-8494');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('alec n. strickland',
'in at associates',
'1-467-132-4527',
'lorem@sedtortor.com',
'1-735-818-0914');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('britanni holt',
'magna cras convallis corp.',
'1-842-554-5106',
'varius@seddictumeleifend.ca',
'1-381-532-1632');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('audra o. ingram',
'commodo llp',
'1-934-490-5667',
'dictum.augue.malesuada@idmagnaet.net',
'1-225-217-4699');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('cody k. chapman',
'tempor arcu inc.',
'1-349-383-6623',
'non.arcu.vivamus@rutrumnon.co.uk',
'1-824-229-3521');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('tobias merritt',
'amet risus company',
'1-457-675-2547',
'felis@ut.net',
'1-404-101-9940');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('ryder g. vega',
'massa llc',
'1-655-465-4319',
'dui.nec@convalliserateget.co.uk',
'1-282-381-9477');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('arthur woods',
'donec elementum lorem foundation',
'1-406-810-9583',
'eros.turpis.non@antemaecenasmi.co.uk',
'1-462-765-8157');
insert into suppliers (contact_name,company_name,phone,email,fax)
values ('lael snider',
'ultricies adipiscing enim corporation',
'1-252-634-4780',
'natoque.penatibus@in.com',
'1-986-508-6373');
要从suppliers
表中逻辑删除fax
列,请使用以下语句:
alter table suppliers
set unused column fax;
从现在开始,就再不能访问fax
列了,如下查询所示 -
select
*
from
suppliers;
执行上面语句,结果如下 -
可以从dba_unused_col_tabs
视图查看每个表中未使用的列的数量:
select
*
from
dba_unused_col_tabs;
如上所见,suppliers
表有一个未使用的列。要从suppliers
表中删除所有未使用的列,请使用以下语句:
alter table suppliers
drop unused columns;
再次查询dba_unused_col_tabs
视图中的数据,将得到一个空的结果集。
要从物理表中删除列,请使用以下语句:
alter table table_name
drop column column_name;
要删除多个列,请使用以下语句:
alter table table_name
drop (
column_name_1,
column_name_2
);
以下语句从suppliers
表中删除email
和fax
列:
alter table
suppliers
drop (
email,
phone
);
在本教程中,您学习了如何使用oracle drop column
语句从表中删除一列或多列。