当然、そらでかけるわけもなく。
- レンジ
CREATE TABLE tab1
( col1 CHAR(2),
col2 VARCHAR2(100),
CONSTRAINT tab1_pk PRIMARY KEY(col1)
)
PARTITION BY RANGE( col1 )
( PARTITION tab1_part1 VALUES LESS THAN ('10'),
PARTITION tab1_part2 VALUES LESS THAN ('20'),
PARTITION tab1_part3 VALUES LESS THAN ('30'),
PARTITION tab1_part4 VALUES LESS THAN ('40')
);
- ハッシュ
CREATE TABLE tab1
( col1 CHAR(2),
col2 VARCHAR2(100),
CONSTRAINT tab1_pk PRIMARY KEY(col1)
)
PARTITION BY hash ( col1 )
PARTITIONs 4;
ハッシュで名前を指定するときは
CREATE TABLE tab1
( col1 CHAR(2),
col2 VARCHAR2(100),
CONSTRAINT tab1_pk PRIMARY KEY(col1)
)
PARTITION BY hash ( col1 )
( PARTITION tab1_part1 ,
PARTITION tab1_part2 ,
PARTITION tab1_part3 ,
PARTITION tab1_part4
);
- リスト
CREATE TABLE tab1
( col1 CHAR(2),
col2 VARCHAR2(100),
CONSTRAINT tab1_pk PRIMARY KEY(col1)
)
PARTITION BY list ( col1 )
( PARTITION tab1_part1 values ('00','01'),
PARTITION tab1_part2 values ('02','03'),
PARTITION tab1_part3 values ('04','05'),
PARTITION tab1_part4 values (default)
);
- インターバル
よくわかってないけど。
CREATE TABLE tab1
( col1 CHAR(2),
col2 date,
col3 VARCHAR2(100),
CONSTRAINT tab1_pk PRIMARY KEY(col1)
)
PARTITION BY RANGE (col2)
interval(numtoyminterval(1, 'month'));
( PARTITION tab1_part1
VALUES LESS THAN (to_date('20080101', 'yyyymmdd'))
);
インターバルパーティションは、パーティションをを 1つ以上指定してあげないといけない模様。インターバールパーティションだと、未来のパーティションは作成されるので指定はいらないが、過去のものは指定できないようで、1つのパーティションを起点として作成するみたい。
索引のパーティションも。
LOCALで作る場合は、パーティションの指定は必須ではありませんっが、GLOBAL だと任意で切らないといけないので。
- レンジ(索引)
CREATE INDEX ind1 ON tab1(col2) GLOBAL
PARTITION BY RANGE(col2)
( PARTITION ind1_part1 VALUES LESS THAN ('10'),
PARTITION ind1_part2 VALUES LESS THAN ('20'),
PARTITION ind1_part3 VALUES LESS THAN ('30'),
PARTITION ind1_part4 VALUES LESS THAN (maxvalue)
);
- ハッシュ(索引)
CREATE INDEX ind1 ON tab1(col2) GLOBAL
PARTITION BY HASH (col2)
PARTITIONS 4;
- リスト(索引)
以下のエラーで作成できませんでした。
ORA-14151: 表パーティション化メソッドが無効です
うーん、パーティションは謎が深い。。。
ちなみに、11.2.0.4 で確認しています。