使用 ALTER TABLE… DROP PARTITION 命令可删除分区定义及存储在该分区中的数据。语法如下:

ALTER TABLE table_name DROP PARTITION partition_name;

参数

参数 说明
table_name 分区表的名称(可能是 schema 限定的)。
partition_name 要删除的分区的名称。

说明

ALTER TABLE… DROP PARTITION 命令删除分区及存储在该分区中的任何数据。ALTER TABLE… DROP PARTITION 命令可删除 LIST 或 RANGE 分区表的分区;请注意,此命令不适用于 HASH 分区表。当您删除分区时,(该分区的)任何二级分区也将被删除。

要使用 DROP PARTITION 子句,您必须是分区根的所有者、拥有表的组的成员或具有数据库超级用户或管理特权。

示例 - 删除分区

后面的示例删除 sales 表的分区。使用以下命令创建 sales 表:

CREATE TABLE sales
(
  dept_no     number,
  part_no     varchar2,
  country     varchar2(20),
  date    date,
  amount  number
)
PARTITION BY LIST(country)
(
  PARTITION europe VALUES('FRANCE', 'ITALY'),
  PARTITION asia VALUES('INDIA', 'PAKISTAN'),
  PARTITION americas VALUES('US', 'CANADA')
);

通过查询 ALL_TAB_PARTITIONS 视图,显示分区名称:

acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |             high_value
----------------+-------------------------------------
 EUROPE         | FOR VALUES IN ('FRANCE', 'ITALY')
 ASIA           | FOR VALUES IN ('INDIA', 'PAKISTAN')
 AMERICAS       | FOR VALUES IN ('US', 'CANADA')
(3 rows)

要从 sales 表中删除 americas 分区,请调用以下命令:

ALTER TABLE sales DROP PARTITION americas;

通过查询 ALL_TAB_PARTITIONS 视图,可以看到该分区已被成功删除:

acctg=# SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |             high_value
----------------+-------------------------------------
 EUROPE         | FOR VALUES IN ('FRANCE', 'ITALY')
 ASIA           | FOR VALUES IN ('INDIA', 'PAKISTAN')
(2 rows)