【问题标题】:Oracle PL/SQL: SELECT DISTINCT FIELD1, FIELD2 FROM TWO ADIACENT PARTITIONS OF A PARTITIONED TABLEOracle PL/SQL:从分区表的两个 ADIACENT 分区中选择 DISTINCT FIELD1、FIELD2
【发布时间】:2015-11-16 16:09:07
【问题描述】:

我有一个带有字段 MY_DATE 的分区表,该字段始终是从 1999 年到 2017 年每个月的第一天。

例如,它包含 01/01/2015、01/02/2015、..... 01/12/2015 的记录,例如 01/01/1999、01/02/1999 等.

字段MY_DATE是分区字段。

我想以最有效的方式将两个相邻分区(M 月和 M-1 月)的 field2 和 field3 的不同值复制到另一个表中,以便找到不同的一对(field2, field3) 的日期。

Exchange Partition 仅在目标表未分区时有效,但在复制第二个相邻分区的数据时,我收到错误,

“ORA-14099:表中的所有行都不符合指定分区的条件”。

我用的是语句:

ALTER TABLE MY_USER.MY_PARTITIONED_TABLE EXCHANGE PARTITION PART_P201502 WITH TABLE MY_USER.MY_TABLE

当然 MY_PARTITIONED_TABLE 和 MY_TABLE 具有相同的字段,但第一个是如上所述的分区。

请假设 MY_PARTITIONED_TABLE 是一个包含大约 5 亿条记录的巨大表。

目标是找到两个相邻分区的不同的 (field2, field3) 值对。

我的做法是:复制分区M的数据,复制分区M-1的数据,然后SELECT DISTINCT FIELD2, FIELD3 from DESTINATION_TABLE。

非常感谢您考虑我的要求。

【问题讨论】:

  • 你是如何定义你的分区的?按范围还是按列表?

标签: sql oracle database-partitioning


【解决方案1】:

我想复制,...

请注意,EXCHANGE PARTITION 不执行复制,而是执行EXCHANGE。 IE。切换大表和临时表的分区内容。 如果你对两个不同的分区和同一个临时表执行两次,你会得到你收到的错误。

要复制(提取数据而不更改大表),您可以使用

create table tab1 as 
select * from bigtable partition (partition_name1)

create table tab2 as 
select * from bigtable partition (partition_name2)

你的源表没有改变,在你准备好之后简单地删除两个临时表。两个分区只需要额外的空间。

也许您可以在不复制数据的情况下执行查询

with tmp as (
select * from bigtable partition (partition_name1)
union all
select * from bigtable partition (partition_name2)
)
select ....
from tmp;

祝你好运!

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多