Topik ini menjelaskan cara menangani nilai liar dalam tabel terpartisi daftar atau rentang.
Partisi atau subpartisi DEFAULT atau MAXVALUE menangkap baris yang tidak sesuai dengan aturan partisi lainnya yang didefinisikan untuk sebuah tabel.
Definisikan partisi DEFAULT
Partisi DEFAULT menangkap baris yang tidak cocok dengan partisi lain dalam tabel terpartisi daftar atau subpartisi daftar. Jika Anda tidak menyertakan aturan DEFAULT, baris yang berisi nilai yang tidak sesuai dengan aturan partisi akan menyebabkan kesalahan. Setiap partisi dalam tabel terpartisi daftar atau subpartisi dalam tabel subpartisi daftar dapat memiliki aturan DEFAULT sendiri.
PARTITION nama_partisi VALUES (DEFAULT)Di mana nama_partisi menentukan nama partisi atau subpartisi yang digunakan untuk menyimpan baris yang tidak sesuai dengan aturan partisi yang ditentukan untuk partisi lainnya.
acctg=# INSERT INTO sales VALUES
acctg-# (40, '3000x', 'IRELAND', '01-Mar-2012', '45000');
ERROR: inserted partition key does not map to any partitionCREATE 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'),
PARTITION others VALUES (DEFAULT)
);INSERT INTO sales VALUES
(40, '3000x', 'IRELAND', '01-Mar-2012', '45000');acctg=# SELECT tableoid::regclass, * FROM sales;
tableoid | dept_no | part_no | country | date | amount
----------------+---------+---------+----------+--------------------+--------
sales_others | 40 | 3000x | IRELAND | 01-MAR-12 00:00:00 | 45000
(18 rows)- Anda tidak dapat menjalankan perintah ALTER TABLE...ADD PARTITION untuk menambahkan partisi ke tabel yang memiliki aturan DEFAULT. Namun, Anda dapat menjalankan perintah ALTER TABLE...SPLIT PARTITION untuk membagi partisi yang ada.
- Anda tidak dapat menjalankan perintah ALTER TABLE...ADD SUBPARTITION untuk menambahkan subpartisi ke tabel yang memiliki aturan DEFAULT. Namun, Anda dapat menjalankan perintah ALTER TABLE...SPLIT SUBPARTITION untuk membagi subpartisi yang ada.
Definisikan partisi MAXVALUE
Partisi atau subpartisi MAXVALUE menangkap baris yang tidak cocok dengan partisi lain dalam tabel terpartisi rentang atau subpartisi rentang. Jika Anda tidak menyertakan aturan MAXVALUE, kesalahan terjadi jika baris berisi nilai yang melebihi batas atas yang ditentukan oleh aturan partisi. Setiap partisi atau subpartisi dapat memiliki partisi MAXVALUE sendiri.
- Anda tidak dapat menjalankan pernyataan ALTER TABLE ... ADD PARTITION untuk menambahkan partisi ke tabel yang memiliki aturan MAXVALUE. Namun, Anda dapat menjalankan pernyataan ALTER TABLE ... SPLIT PARTITION untuk membagi partisi yang ada.
- Anda tidak dapat menjalankan pernyataan ALTER TABLE... ADD SUBPARTITION untuk menambahkan subpartisi ke tabel yang memiliki aturan MAXVALUE. Namun, Anda dapat menjalankan pernyataan ALTER TABLE... SPLIT SUBPARTITION untuk membagi subpartisi yang ada.
PARTITION nama_partisi VALUES LESS THAN (MAXVALUE)Dalam sintaksis, nama_partisi menentukan nama partisi yang digunakan untuk menyimpan baris yang tidak sesuai dengan aturan partisi yang ditentukan untuk partisi lainnya.
acctg=# INSERT INTO sales VALUES
acctg-# (40, '3000x', 'IRELAND', '01-Mar-2013', '45000');
ERROR: inserted partition key does not map to any partitionCREATE TABLE sales
(
dept_no number,
part_no varchar2,
country varchar2(20),
date date,
amount number
)
PARTITION BY RANGE(date)
(
PARTITION q1_2012 VALUES LESS THAN('2012-Apr-01'),
PARTITION q2_2012 VALUES LESS THAN('2012-Jul-01'),
PARTITION q3_2012 VALUES LESS THAN('2012-Oct-01'),
PARTITION q4_2012 VALUES LESS THAN('2013-Jan-01'),
PARTITION others VALUES LESS THAN (MAXVALUE)
);INSERT INTO sales VALUES
(40, '3000x', 'IRELAND', '2015-Oct-01', '45000');acctg=# SELECT tableoid::regclass, * FROM sales;
tableoid | dept_no | part_no | country | date | amount
---------------+---------+---------+----------+--------------------+---------
sales_q1_2012 | 10 | 4519b | FRANCE | 17-JAN-12 00:00:00 | 45000
sales_q1_2012 | 20 | 3788a | INDIA | 01-MAR-12 00:00:00 | 75000
sales_q1_2012 | 30 | 9519b | CANADA | 01-FEB-12 00:00:00 | 75000
sales_q2_2012 | 40 | 9519b | US | 12-APR-12 00:00:00 | 145000
sales_q2_2012 | 20 | 3788a | PAKISTAN | 04-JUN-12 00:00:00 | 37500
sales_q2_2012 | 30 | 4519b | CANADA | 08-APR-12 00:00:00 | 120000
sales_q2_2012 | 40 | 3788a | US | 12-MAY-12 00:00:00 | 4950
sales_q3_2012 | 10 | 9519b | ITALY | 07-JUL-12 00:00:00 | 15000
sales_q3_2012 | 10 | 9519a | FRANCE | 18-AUG-12 00:00:00 | 650000
sales_q3_2012 | 10 | 9519b | FRANCE | 18-AUG-12 00:00:00 | 650000
sales_q3_2012 | 20 | 3788b | INDIA | 21-SEP-12 00:00:00 | 5090
sales_q3_2012 | 40 | 4788a | US | 23-SEP-12 00:00:00 | 4950
sales_q4_2012 | 40 | 4577b | US | 11-NOV-12 00:00:00 | 25000
sales_q4_2012 | 30 | 7588b | CANADA | 14-DEC-12 00:00:00 | 50000
sales_q4_2012 | 40 | 4788b | US | 09-OCT-12 00:00:00 | 15000
sales_q4_2012 | 20 | 4519a | INDIA | 18-OCT-12 00:00:00 | 650000
sales_q4_2012 | 20 | 4519b | INDIA | 02-DEC-12 00:00:00 | 5090
sales_others | 40 | 3000x | IRELAND | 01-MAR-13 00:00:00 | 45000
(18 rows)