파티션 테이블의 파티션 키 에는 함수 적용이 안될까요??? PARTITION BY RANGE (SUBSTR(COL1, 1, 4)) 0 11 3,106

by 도와주십시요 ㅠ,ㅜ [Oracle 기초] [2019.08.26 11:48:38]


파티션 테이블의 파티션 키 에는 함수 적용이 안될까요???

현제 COL1 컬럼에는 '20001231ABCDEFGH' 라는 데이터가 들어가있다는 가정하에 입니다.

CREATE TABLE TEST

(

COL1 VARCHAR2(20),

COL2 VARCHAR2(30)

)

PARTITION BY RANGE (SUBSTR(COL1, 1, 4))                      <--요부분에서 에러가 나면서 생성이 안됨... 우괄호가 없다는데... 그문제는 아닌거 같구 ㅠ

(

PARTITION PT_2000 VALUES LESS THAN ('2000'),

PARTITION PT_2001 VALUES LESS THAN ('2001'),

PARTITION PT_MAX VALUES LESS THAN (MAXVALUE)

);

 

파티션키에는 함수 적용이 안되는 것인지 제가 잘못 구현 한건지 의문을 모르겠습니다. 

 

by 우리집아찌 [2019.08.26 12:31:18]
-- 이렇게 해보세요. 
-- col1이 날짜일경우

CREATE TABLE TEST
(
COL1 VARCHAR2(20),
COL2 VARCHAR2(30)
)

PARTITION BY RANGE ( COL1 )                     
(
PARTITION PT_2000 VALUES LESS THAN ('20010101'),
PARTITION PT_2001 VALUES LESS THAN ('20020101'),
PARTITION PT_MAX VALUES LESS THAN (MAXVALUE)

);

 


by 도와주십시요 ㅠ,ㅜ [2019.08.26 13:17:28]

아찌님 답변 감사합니다.~~

답변 주신데로 하면 되는건 알고 있는데

파티션 키를 함수적용해서 잡는 방법이 궁금해서요


by 도와주십시요 ㅠ,ㅜ [2019.08.26 14:42:43]

답변 감사합니다.~~

큰도움이 되었습니다. !!!


by DarkBee [2019.08.26 13:32:49]

함수를 쓸 필요가 없어보이는데요.

 

CREATE TABLE TEST
(
    COL1 VARCHAR2(20)
  , COL2 VARCHAR2(30)

)
PARTITION BY RANGE (dt)
(
    PARTITION PT_2000 VALUES LESS THAN ('2000')
  , PARTITION PT_2001 VALUES LESS THAN ('2001')
)


by 도와주십시요 ㅠ,ㅜ [2019.08.26 13:36:33]

현제 COL1 컬럼에는 '20001231ABCDEFGH' 라는 데이터가 들어가있다는 가정하에 입니다.

실제 컬럼의 데이터도 위와 같은 형식으로 들어있어서 앞에서 4자리만 가져와 파티션을 나누고 싶어서 

질문드리게 되었습니다.


by 도와주십시요 ㅠ,ㅜ [2019.08.26 14:42:49]

답변 감사합니다.~~

큰도움이 되었습니다. !!!


by 마농 [2019.08.26 13:47:15]

함수를 굳이 안써도 됩니다.
어차피 이퀄 비교(같다)가 아닌 범위 비교(작다)이므로 함수 사용 없이 그대로 비교하시면 됩니다.
다만 비교값과 파티션명에 주의하세요.
- 오류 : PT_2001 VALUES LESS THAN ('2001')
- 수정 : PT_2000 VALUES LESS THAN ('2001')
- 2001 보다 작은 건 2001 이 아니라 2000 이죠.


by 도와주십시요 ㅠ,ㅜ [2019.08.26 14:17:02]

아... 되는군여

'20001231ABCDEFGH' 라는 데이터를 INSRT 했을시 

앞에가 년도년월일 로 되있기 떄문에 인식 해서 자동으로 데이터가 들어가는군요...

 

혹시 실제 데이터가 'A10-20001231-BB' 이런 데이터를  파티션 테이블로 신규로 만들고 싶을때

이럴 경우는 불가능한 방법일까요?

 

PARTITION BY RANGE ( SUBSTR(COL1,5,4) )     ???? <<--- 불가능한 방법 이겠죠?


by 우리집아찌 [2019.08.26 14:33:10]

파티션키 컬럼을 따로만들어 쓰세요.


by 마농 [2019.08.26 14:40:00]

그래서 테이블 정규화 하라고 하는 것이고,
여러 컬럼 합쳐서 사용하지 말라고 하는 것입니다.
굳이 3개 항목 합쳐서 사용하지 않고, 각각의 컬럼으로 사용하면 됩니다.


by 도와주십시요 ㅠ,ㅜ [2019.08.26 14:41:51]

답변 감사합니다.~~

큰도움이 되었습니다. !!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입