我想以一种我总是知道记录去向的方式对表进行分区。例如,如果我有一个电话列表和 10 个分区,我想根据每个电话号码的最后一位数字进行引导。
值得一提的是,我使用的是 Oracle 11gR2
PARTITION BY LIST
但是,似乎不允许这样做。
CREATE TABLE t (
tel INT NOT NULL
)
PARTITION BY LIST ( MOD (tel,10) )
(PARTITION MSISDN0 VALUES (0),
PARTITION MSISDN1 VALUES (1),
PARTITION MSISDN2 VALUES (2),
PARTITION MSISDN3 VALUES (3),
PARTITION MSISDN4 VALUES (4),
PARTITION MSISDN5 VALUES (5),
PARTITION MSISDN6 VALUES (6),
PARTITION MSISDN7 VALUES (7),
PARTITION MSISDN8 VALUES (8),
PARTITION MSISDN9 VALUES (9));
Erro de SQL: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
它似乎LIST PARTITIONS
不接受功能。我仍然使用虚拟列进行管理:
CREATE TABLE t (
tel INT NOT NULL
, tel_p GENERATED ALWAYS AS ( mod (tel,10) )
)
PARTITION BY LIST ( tel_p )
(PARTITION MSISDN0 VALUES (0),
PARTITION MSISDN1 VALUES (1),
PARTITION MSISDN2 VALUES (2),
PARTITION MSISDN3 VALUES (3),
PARTITION MSISDN4 VALUES (4),
PARTITION MSISDN5 VALUES (5),
PARTITION MSISDN6 VALUES (6),
PARTITION MSISDN7 VALUES (7),
PARTITION MSISDN8 VALUES (8),
PARTITION MSISDN9 VALUES (9));
虽然感觉很不稳定......有没有“正确的方法”来做到这一点?