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