在本教程中,将学习如何使用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
语句从表中删除一列或多列。