2017-05-23 1 views
1

파티션에 따라 두 개를 결합하고 싶지만 이름이 다릅니다. 둘 다 날짜별로 분할됩니다. 예를 들어, 테이블 A에 파티션 'PARTITION_20161231'(날짜는 1.12.2016에서 31.12.2016까지입니다) 및 테이블 B에서 간격 파티션 SYS_XXXXXX가 있습니다. 테이블 B에서 적절한 파티션 이름을 가져 와서 파티션과 결합합니다 테이블 A (테이블 A의 파티션과 동일한 날짜 범위를 가진 파티션을 의미).적절한 파티션을 선택하십시오.

FOR part IN (SELECT partition_name FROM dba_tab_partitions WHERE table_name = 'TABLE_A') 
    LOOP 
    SELECT /*+ parallel(8) */ 
      a.rowid 
      b.attribute 
     FROM table_a PARTITION(part.partition_name) 
     LEFT JOIN table_b PARTITION(#PARTITION#) b 
     ON b.id = a.id 
    END LOOP; 

여기서는 파티션을 병합해야합니다. 여기서는 단순화 된 예입니다. 문제는 # PARTITION #을 얻는 방법입니다.

답변

2

특정 파티션을 쿼리하려면 이름을 알 필요가 없습니다. partition for() 절을 사용하면 파티션 키로 파티션을 참조 할 수 있습니다. 예를 들어 하나의

select * 
    from table_a --or table_b 
partition for (date '2016-12-01') 

다음과 같은 쿼리는 date '2016-12-01' 파티션 키가 속하는 파티션의 모든 데이터를 반환합니다.

create table t2(
c1 date 
) 
partition by range (c1) 
interval (interval '1' month) (
    partition part_1 values less than (date '2017-01-01') 
); 

insert into t2 values (date '2016-12-01'); 
insert into t2 values (date '2016-12-31'); 

commit; 

select * 
    from t2 partition for (date '2016-12-01'); 

C1  
--------- 
01-DEC-16 
31-DEC-16 
: 여기

다른 예는
관련 문제