TIMESTAMP 컬럼으로 파티션 하는 방법

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

TIMESTAMP 컬럼으로 파티션 하는 방법

일반적으로 range 파티션 테이블을 만들 때는 다음과 같이 한다.

create table t (...)
tablespace ...
partition by range (c)
(
partition p1 values less than (100),
partition p2 values less than (200),
...
partition p_max values less than (maxvalue)
);

파티션 키 컬럼이 DATE 타입일 경우에는 다음과 같이 하면 된다.

create table t (...)
tablespace ...
partition by range (dt)
(
partition p2006 values
    less than (to_date('20070101','YYYYMMDD')),
partition p2007 values
    less than (to_date('20070101','YYYYMMDD')),
...
partition p_max values
    less than (maxvalue)
);

파티션 키 컬럼이 TIMESTAMP인 컬럼으로 파티션을 할 때는 다음과 같이 하면 될 것 같다.

create table t (...)
tablespace ...
partition by range (dt)
(
partition p2006 values
    less than (to_timestamp('20070101','YYYYMMDD')),
partition p2007 values
    less than (to_timestamp('20070101','YYYYMMDD')),
...
partition p_max values
    less than (maxvalue)
);

그러나 위와 같은 SQL을 실행시키면 다음과 같은 에러가 발생한다.

partition p2006 values
   less than (to_timestamp('20070101','YYYYMMDD')),
              *
ERROR at line 4:
ORA-30078: partition bound must be
TIME/TIMESTAMP WITH TIME ZONE literals

TIMESTAMP 컬럼으로 파티션을 하는 정확한 문법은 다음과 같다.

create table t (...)
tablespace ...
partition by range (dt)
(
partition p2006 values
    less than (timestamp'2007-01-01 00:00:00 +0:00'),
partition p2007 values
    less than (timestamp'2008-01-01 00:00:00 +0:00'),
...
partition p_max values
    less than (maxvalue)
);

참고