本文介紹如何轉換RANGE分區和INTERVAL RANGE分區。
RANGE分區轉換為INTERVAL RANGE分區
ALTER TABLE...SET INTERVAL命令可將現有的RANGE分區錶轉換為INTERVAL RANGE分區表。
設定範圍或時間間隔後,資料庫會自動建立一個指定範圍或時間間隔的新分區,並將資料插入到新分區中。
命令如下:
ALTER TABLE <table_name> SET INTERVAL (<constant> | <expression>);
關於INTERVAL參數的資訊,請參見INTERVAL RANGE分區。
INTERVAL RANGE分區轉換為RANGE分區
SET INTERVAL()命令用于禁用INTERVAL RANGE分區。禁用後,資料庫會將INTERVAL RANGE分區錶轉換為RANGE分區表,並將INTERVAL RANGE分區的範圍或時間間隔設定為RANGE分區的範圍或時間間隔。
命令如下:
ALTER TABLE <table_name> SET INTERVAL ();
樣本
以下樣本會將表sales從RANGE分區轉換為INTERVAL RANGE分區,並在分區表中插入資料。
建立RANGE分區表sales。樣本如下:
CREATE TABLE sales
(
prod_id int,
prod_quantity int,
sold_month date
)
PARTITION BY RANGE(sold_month)
(
PARTITION p1
VALUES LESS THAN('15-JAN-2019'),
PARTITION p2
VALUES LESS THAN('15-FEB-2019')
);
查詢ALL_TAB_PARTITIONS視圖。樣本如下:
SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
返回結果如下:
partition_name | high_value
----------------+----------------------
P1 | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
P2 | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(2 rows)
將RANGE分區錶轉換為INTERVAL RANGE分區表。樣本如下:
ALTER TABLE sales SET INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'));
插入超過定界分割的資料。樣本如下:
INSERT INTO sales VALUES (1,100,'05-APR-2019');
INSERT 0 1
插入資料後,重新查詢ALL_TAB_PARTITIONS視圖。樣本如下:
SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
成功插入資料,系統將產生一個INTERVAL RANGE分區名稱,該名稱因每個會話而不同。返回結果如下:
partition_name | high_value
----------------+----------------------
SYS596430103 | FOR VALUES FROM ('15-MAR-19 00:00:00') TO ('15-APR-19 00:00:00')
P1 | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
P2 | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(3 rows)