在本教學中,將學習如何使用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',
'[email protected]',
'1-593-653-6421');
INSERT INTO suppliers (contact_name,company_name,phone,email,fax)
VALUES ('Haley Franco',
'Ante Vivamus Limited',
'1-754-597-2827',
'[email protected]',
'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',
'[email protected]',
'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',
'[email protected]',
'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',
'[email protected]',
'1-381-532-1632');
INSERT INTO suppliers (contact_name,company_name,phone,email,fax)
VALUES ('Audra O. Ingram',
'Commodo LLP',
'1-934-490-5667',
'[email protected]',
'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',
'[email protected]',
'1-824-229-3521');
INSERT INTO suppliers (contact_name,company_name,phone,email,fax)
VALUES ('Tobias Merritt',
'Amet Risus Company',
'1-457-675-2547',
'[email protected]',
'1-404-101-9940');
INSERT INTO suppliers (contact_name,company_name,phone,email,fax)
VALUES ('Ryder G. Vega',
'Massa LLC',
'1-655-465-4319',
'[email protected]',
'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',
'[email protected]',
'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',
'[email protected]',
'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
語句從表中刪除一列或多列。