Oracle刪除列


在本教學中,將學習如何使用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',
        '[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檢視中的資料,將得到一個空的結果集。

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語句從表中刪除一列或多列。