使用自定义函数在Oracle中进行分区

时间:2016-09-28 11:40:40

标签: oracle scalability partition

我尝试使用ID列对我的表进行分区,以便所有偶数ID都应该在partition_1中,奇数ID应该在partition_2中。满足我需求的唯一最接近的是virtual columns

CREATE TABLE sales
(
 id       NUMBER(6) NOT NULL,
 mod_id AS (MOD(id, 2))
);
PARTITION BY RANGE (mod_id)
(
 PARTITION mod_id VALUES LESS THAN(1),
 PARTITION mod_id VALUES LESS THAN(2),
)

有没有比这更好的方法?

1 个答案:

答案 0 :(得分:0)

当你使用MOD函数计算mod_id时,你的列只有2个值(0和1), 在这种情况下,您可以使用LIST分区,如下所示。

CREATE TABLE sales
(
 id       NUMBER(6) NOT NULL,
 mod_id AS (MOD(id, 2))
)
PARTITION BY LIST (mod_id)
      (PARTITION mod_id0 VALUES (0),
       PARTITION mod_id1 VALUES (1));

可以肯定,带有奇数id的记录会将mod_id1分区,甚至分割成mod_id0。
您可以使用以下查询进行验证:

select * from sales partition (mod_id1);