レコードの行先を常に把握できるように、テーブルを分割したいと考えています。たとえば、電話番号リストと 10 個のパーティションがある場合、各電話番号の下 1 桁に基づいてガイドするようにガイドしたいと考えています。
私は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));
かなり不安定に感じますが...それを行う「適切な方法」はありますか?