partition으로 생성된? 테이블 동적 조회 방법이 궁금합니다. 0 4 6,757

by 물개 [2015.03.31 17:34:26]


select *

  from TTT PARTITION (PARTITION_NAME);

 

위 형태로 PARTITION_NAME이 특정된 값으로 들어가면 조회가 되던데..
위 파티션 NAME을 임의로 지정한 값으로 조회되도록 처리하고자 합니다.

 

아래 쿼리문으로 특정 날짜값의 PARTITION_NAME 을 얻을 수 있지만.

위 쿼리문에 동적으로 적용하는 방법을 모르겠습니다.

SELECT PARTITION_NAME

    FROM ALL_TAB_PARTITIONS
    WHERE TABLE_NAME LIKE 'TABLE_HISTORY3'
    AND REVERSE(SUBSTR(REVERSE(PARTITION_NAME),1,8)) = '20150331'; 

 

 

select *

  from TTT PARTITION (

                     SELECT PARTITION_NAME
                      FROM ALL_TAB_PARTITIONS         
                    
WHERE TABLE_NAME LIKE 'TABLE_HISTORY3'
                    
AND REVERSE(SUBSTR(REVERSE(PARTITION_NAME),1,8)) = '20150331'

);

이렇게 하면 ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다. 라는 메시지만 나옵니다.

어떻게 동적으로 partition_name으로 제어 할 수 있을까요..?

 

읽어주셔서 감사합니다.

by 마농 [2015.03.31 18:02:00]

파티션 테이블의 장점은 굳이 파티션 지정 안해도 조건만 주면 알아서 해당 파티션만 스캔하는거죠.
따라서 파티션 지정 없이 조건절에 파티션키에 대한 조건을 주시면 될 듯 하구요.
굳이, 꼭, 파티션명을 지정해야 한다면? 동적쿼리를 이용해야 하겠지요.
[강정식의 오라클 이야기]Dynamic SQL 사용방법


by 물개 [2015.04.01 10:03:08]

답변 감사합니다.

무조건 partition의 partion_name을 지정해야만 조회 가능 한 줄 알았습니다;

특정 where 조건만 사용하니 조회가 잘 되네요;;

static과 dynamic에 대한 내용도 잘 배워갑니다.


by 창조의날개 [2015.03.31 19:12:02]

PARTITION_NAME의 뒤에 8자리가 날자라면 PARTITION_NAME을 어떤 규칙을 가지고 만들었다고 보여지는데요..

 

PARTITION_NAME을 자동으로 만들지 않고 PARTITION_NAME 생성 규칙이 있을 텐데요.

구지 PARTITION_NAME을 조회 해서 쿼리를 만들려는 이유도 궁금하네요...

 


by 물개 [2015.04.01 10:04:54]

partition 으로 생성된 테이블은 무조건 partition으로 조회하고 그 안에서 일부의 데이타를 뽑아야만 하는 줄 알았습니다;

그래서 위와 같은 질문을 드리게 되었지요

기존 조건문을 넣고 parition_name에 대한 문구를 제거하니 잘 됩니다.

답변 감사합니다.

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