【问题标题】:Select proper partition选择合适的分区
【发布时间】:2017-10-23 03:41:15
【问题描述】:

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

【问题讨论】:

    标签: sql oracle partition


    【解决方案1】:

    查询一个特定的分区不需要知道它的名字。 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
    

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多