选择适当的分区

时间:2017-05-23 09:11:33

标签: sql oracle partition

我想加入两个相应的分区,但它们有不同的名称。两者都按日期分区。 例如,我在表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#?

1 个答案:

答案 0 :(得分: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