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) 과 같이 지정하면 됩니다.
'IT관련' 카테고리의 다른 글
오라클 에러 정보 (ORA-01653) - 테이블스페이스에서 테이블을 위한 공간 확장을 못하는 (0) | 2019.06.18 |
---|---|
오라클 Hash Partition (해쉬함수에 의한 파티션 테이블) (0) | 2019.06.18 |
오라클 Range Partition (범위로 구분되는 파티션 테이블) (3) | 2019.06.18 |
오라클 파티션 종합 페이지 (Oracle Partition Main Page) (0) | 2019.06.18 |
(오라클 DB 파라메타) deferred_segment_creation (0) | 2019.06.17 |