Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle删除列
Oracle删除列
作者:--    发布时间:2019-11-20

在本教程中,将学习如何使用oracle drop column语句从表中删除一个或多个列。

oracle使用set unused 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;

oracle set unused column示例

下面来创建一个名为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视图中的数据,将得到一个空的结果集。

oracle使用drop column子句删除列

要从物理表中删除列,请使用以下语句:

alter table table_name 
drop column column_name;

要删除多个列,请使用以下语句:

alter table table_name
drop (
    column_name_1,
    column_name_2
);

oracle drop column子句的例子

以下语句从suppliers表中删除emailfax列:

alter table
    suppliers 
drop (
        email,
        phone
    );

在本教程中,您学习了如何使用oracle drop column语句从表中删除一列或多列。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册