본문 바로가기

IT관련

오라클 List Partition (특정한 값으로 구분되는 파티션 테이블)

List Partition 은 범위가 아닌 특정한 값으로 구분되는 파티션 테이블 입니다.

주로 특정 구분자로 데이터의 구분이 가능한 경우 사용합니다.

 


create table SALES (
  sales_no       number,
  sale_year      number,
  sale_month     number,
  sale_day       number,
  customer_name  varchar2(30),
  birth_date     date,
  price          number,
  state          varchar2(2)
)
partition by list (state)
(
  partition P_EAST    values ('MA','NY','CT','NH','ME','MD','VA','PA','NJ'),
  partition P_WEST    values ('CA','AZ','NM','OR','WA','UT','NV','CO'),
  partition P_SOUTH   values ('TX','KY','TN','LA','MS','AR','AL','GA'),
  partition P_CENTRAL values ('OH','ND','SD','MO','IL','MI','IA')
);

 

위의 예에서는 state 컬럼을 파티션키로 해서 총 4개의 파티션을 만듭니다.

SALES 테이블에 Insert 되는 데이터의 state 값에 따라 일치하는 파티션으로 들어가서 저장이 될 겁니다. 

 

이제 만들어진 파티션에 데이터를 넣어 보겠습니다.

 


insert into SALES values (1, 2004, 05, 02, 'Sophia', to_date('19740502','yyyymmdd'), 65000, 'WA');
insert into SALES values (2, 2005, 03, 02, 'Emily',  to_date('19750302','yyyymmdd'), 23000, 'OR');
insert into SALES values (3, 2006, 08, 02, 'Olivia', to_date('19760802','yyyymmdd'), 34000, 'TX');
insert into SALES values (4, 2007, 02, 02, 'Amelia', to_date('19770202','yyyymmdd'), 12000, 'CA');
insert into SALES values (5, 2008, 04, 02, 'Chloe',  to_date('19780402','yyyymmdd'), 55000, 'FL');

 

 

데이터가 잘 들어가다가 마지막 데이터에서 에러가 났습니다. ORA-14400 매핑되는 파티션이 없다네요.

state 값이 'FL' 인 경우 들어갈 수 있는 파티션이 정의되어 있지 않기 때문입니다.

이 경우, 'FL' 값이 들어갈 수 있는 파티션을 추가로 만들 수도 있겠지만...

이런 경우를 대비해서 사용할 수 있는 default 라는 키워드가 있습니다. 

 


create table SALES (
  sales_no       number,
  sale_year      number,
  sale_month     number,
  sale_day       number,
  customer_name  varchar2(30),
  birth_date     date,
  price          number,
  state          varchar2(2)
)
partition by list (state) 
(
  partition P_EAST    values ('MA','NY','CT','NH','ME','MD','VA','PA','NJ'),
  partition P_WEST    values ('CA','AZ','NM','OR','WA','UT','NV','CO'),
  partition P_SOUTH   values ('TX','KY','TN','LA','MS','AR','AL','GA'),
  partition P_CENTRAL values ('OH','ND','SD','MO','IL','MI','IA'),
  partition P_NULL    values (null),
  partition P_UNKNOWN values (default)
);


 

이번에는 에러없이 잘 들어가는 것을 확인할 수 있습니다.

 

 

state='FL' 인 데이터는 P_UNKNOWN 이라는 파티션으로 들어간 걸 확인할 수 있습니다. 

 

추가로, state 컬럼에 아예 값이 안들어오는 경우도 가능하고

이때는 앞에 스크립트에서처럼 values (null) 과 같이 지정하면 됩니다.

 

 

▶ 오라클 파티션 종합 페이지 바로가기