ALTER TABLE…TRUNCATE SUBPARTITION命令用于從指定的子分區(qū)中刪除所有數(shù)據(jù),留下完整的子分區(qū)結(jié)構(gòu)。

語(yǔ)法介紹

語(yǔ)法如下:
ALTER TABLE table_name 
  TRUNCATE SUBPARTITION subpartition_name 
  [{DROP|REUSE} STORAGE]

概述

ALTER TABLE…TRUNCATE SUBPARTITION命令用于從指定的子分區(qū)中刪除所有數(shù)據(jù),留下完整的子分區(qū)結(jié)構(gòu)。

ALTER TABLE…TRUNCATE SUBPARTITION不會(huì)引起可能因表而存在的觸發(fā)器ON DELETE起火,但會(huì)使觸發(fā)器ON TRUNCATE起火。如果為子分區(qū)定義了觸發(fā)器ON TRUNCATE,那么就會(huì)使所有的觸發(fā)器BEFORE TRUNCATE在截?cái)嗖僮髑熬推鸹穑⑹顾械挠|發(fā)器AFTER TRUNCATE在最后一個(gè)截?cái)嗖僮骱笠财鸹稹?

您對(duì)一個(gè)表必須有TRUNCATE權(quán)限,才能調(diào)用ALTER TABLE…TRUNCATE SUBPARTITION。

參數(shù)

參數(shù) 參數(shù)說(shuō)明
table name 分區(qū)表的名稱(可以采用模式限定的方式引用)。
subpartition name 要截?cái)嗟淖臃謪^(qū)名稱。
說(shuō)明 僅在兼容情況下包括DROP STORAGE和REUSE STORAGE子句,且子句會(huì)被解析并忽略。

示例 – 清空子分區(qū)

下列示例從表sales的子分區(qū)中刪除了數(shù)據(jù)。使用下列命令來(lái)創(chuàng)建表sales:
CREATE TABLE sales
(
  dept_no     number,
  part_no     varchar2,
  country     varchar2(20),
  date        date,
  amount      number
)
PARTITION BY RANGE(date) SUBPARTITION BY LIST (country)
(
  PARTITION "2011" VALUES LESS THAN('01-JAN-2012')
  (
    SUBPARTITION europe_2011 VALUES ('ITALY', 'FRANCE'),
    SUBPARTITION asia_2011 VALUES ('PAKISTAN', 'INDIA'),
    SUBPARTITION americas_2011 VALUES ('US', 'CANADA')
  ),
  PARTITION "2012" VALUES LESS THAN('01-JAN-2013')
  (
    SUBPARTITION europe_2012 VALUES ('ITALY', 'FRANCE'),
    SUBPARTITION asia_2012 VALUES ('PAKISTAN', 'INDIA'),
    SUBPARTITION americas_2012 VALUES ('US', 'CANADA')
  ),
  PARTITION "2013" VALUES LESS THAN('01-JAN-2015')
  (
    SUBPARTITION europe_2013 VALUES ('ITALY', 'FRANCE'),
    SUBPARTITION asia_2013 VALUES ('PAKISTAN', 'INDIA'),
    SUBPARTITION americas_2013 VALUES ('US', 'CANADA')
  )
);
使用下列命令填充表sales:
INSERT INTO sales VALUES
(10, '4519b', 'FRANCE', '17-Jan-2011', '45000'),
(20, '3788a', 'INDIA', '01-Mar-2012', '75000'),
(40, '9519b', 'US', '12-Apr-2012', '145000'),
(20, '3788a', 'PAKISTAN', '04-Jun-2012', '37500'),
(40, '4577b', 'US', '11-Nov-2012', '25000'),
(30, '7588b', 'CANADA', '14-Dec-2011', '50000'),
(30, '4519b', 'CANADA', '08-Apr-2012', '120000'),
(40, '3788a', 'US', '12-May-2011', '4950'),
(20, '3788a', 'US', '04-Apr-2012', '37500'),
(40, '4577b', 'INDIA', '11-Jun-2011', '25000'),
(10, '9519b', 'ITALY', '07-Jul-2012', '15000'),
(20, '4519b', 'INDIA', '2-Dec-2012', '5090');
查詢表sales顯示了記錄已被分配在子分區(qū)之中:
acctg=# SELECT tableoid::regclass, * FROM sales;
      tableoid      | dept_no| part_no| country  |        date       |amount 
--------------------+--------+--------+----------+-------------------+-------
 sales_2011_europe  |      10| 4519b  | FRANCE   | 17-JAN-11 00:00:00|  45000
 sales_2011_asia    |      40| 4577b  | INDIA    | 11-JUN-11 00:00:00|  25000
 sales_2011_americas|      30| 7588b  | CANADA   | 14-DEC-11 00:00:00|  50000
 sales_2011_americas|      40| 3788a  | US       | 12-MAY-11 00:00:00|   4950
 sales_2012_europe  |      10| 9519b  | ITALY    | 07-JUL-12 00:00:00|  15000
 sales_2012_asia    |      20| 3788a  | INDIA    | 01-MAR-12 00:00:00|  75000
 sales_2012_asia    |      20| 3788a  | PAKISTAN | 04-JUN-12 00:00:00|  37500
 sales_2012_asia    |      20| 4519b  | INDIA    | 02-DEC-12 00:00:00|   5090
 sales_2012_americas|      40| 9519b  | US       | 12-APR-12 00:00:00| 145000
 sales_2012_americas|      40| 4577b  | US       | 11-NOV-12 00:00:00| 25000
 sales_2012_americas|      30| 4519b  | CANADA   | 08-APR-12 00:00:00| 120000
 sales_2012_americas|      20| 3788a  | US       | 04-APR-12 00:00:00|  37500
(12 rows)
要?jiǎng)h除分區(qū)2012_americas的內(nèi)容,先要調(diào)用下列命令:
ALTER TABLE sales TRUNCATE SUBPARTITION "americas_2 012";
現(xiàn)在,查詢表sales顯示了分區(qū)americas_2012的內(nèi)容已被刪除:
acctg=# SELECT tableoid::regclass, * FROM sales;
      tableoid      | dept_no|part_no| country  |        date        | amount 
--------------------+--------+-------+----------+--------------------+-------
 sales_2011_europe  |      10| 4519b | FRANCE   | 17-JAN-11 00:00:00 |  45000
 sales_2011_asia    |      40| 4577b | INDIA    | 11-JUN-11 00:00:00 |  25000
 sales_2011_americas|      30| 7588b | CANADA   | 14-DEC-11 00:00:00 |  50000
 sales_2011_americas|      40| 3788a | US       | 12-MAY-11 00:00:00 |   4950
 sales_2012_europe  |      10| 9519b | ITALY    | 07-JUL-12 00:00:00 |  15000
 sales_2012_asia    |      20| 3788a | INDIA    | 01-MAR-12 00:00:00 |  75000
 sales_2012_asia    |      20| 3788a | PAKISTAN | 04-JUN-12 00:00:00 |  37500
 sales_2012_asia    |      20| 4519b | INDIA    | 02-DEC-12 00:00:00 |   5090
(8 rows)
當(dāng)刪除記錄時(shí),分區(qū)2012_americas的結(jié)構(gòu)仍然是完整的:
acctg=# SELECT subpartition_name, high_value FROM ALL_TAB_SUBPARTITIONS; 
 subpartition_name |     high_value      
-------------------+---------------------
 2013_europe       | 'ITALY', 'FRANCE'   
 2012_europe       | 'ITALY', 'FRANCE'   
 2011_europe       | 'ITALY', 'FRANCE'   
 2013_asia         | 'PAKISTAN', 'INDIA' 
 2012_asia         | 'PAKISTAN', 'INDIA' 
 2011_asia         | 'PAKISTAN', 'INDIA' 
 2013_americas     | 'US', 'CANADA'      
 2012_americas     | 'US', 'CANADA'      
 2011_americas     | 'US', 'CANADA'      
(9 
rows)