2017-05-23 15 views
1

私は2つのパーティションに合っていますが、名前は異なります。どちらも日付で区切られています。 たとえば、テーブル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()句を使用すると、パーティションキーでパーティションを参照できます。例えば1

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 
関連する問題