在Oracle中进行分区比较的PLSQL代码要求

时间:2018-02-18 18:46:37

标签: oracle plsql

有没有办法将一个分区的值与同一个表的另一个分区进行比较?要求就像我有一个表,并假设有5个分区,表有两列(非空)。假设Col1具有所有不同的值,并且在col2中可以存在重复值。因此,在将一个分区与另一个分区进行比较时,或者我们可以根据分区名称在不同的col2值的基础上说出4个分区中的其余分区,如果两个分区之间的值匹配,那么将使用两个分区的并集创建新表。 / p>

如果一个分区的col2值与分区的其余部分之间没有匹配,那么新表将创建相同的结构(没有任何联合)。 注意: 我想通过PLSQL代码自动化这个过程。

目前我手动做的事情:

我有一个表有五个分区,例如表结构:

 create table PART_TEST1
 (col1 int not null, 
 col2 int not null)
 partition by range (col2)
 (partition part1 values less than (10),
 partition part2 values less than (20),
 partition part3 values less than (30),
 partition part4 values less than (40),
 partition part5 values less than (maxvalue));

数据分发:

  • col1具有不同的值,如-1,2,3 ....等等。
  • col2的值为-1,2,-1,1,2,3,4,1 ......等等

col2有重复值,我的目标是根据分区名称找到不同的值,如:

select distinct col2 from PART_TEST1 partition (part1); 

例如,上述查询的输出是:

Col2
1
2

我再次询问是否在其他分区中找到匹配的值:

select distinct col2 from PART_TEST1 partition (part2); 

例如,上述查询的输出是:

Col2
2
3

所以现在第1部分和第2部分有一个相同的值' 2'和两个非常见值1和3。 所以我的最终查询是:

create table 'TABLE_NAME' as select * from part_test1 where col2 = 1;

create table 'TABLE_NAME' as select * from part_test1 where col2 = 3;

create table 'TABLE_NAME' as 
(select * from part_test1 where col2 = 2
union
select * from part_test1 where col2 = 2);

希望现在你能清楚地了解我的问题。我是PLSQL的新手,无法比较分区值。此外,如果我能够比较值,那么如何存储比较查询的输出,然后最终创建表?而且我想我需要将一个分区与其余分区进行比较,就像某种循环操作一样。

0 个答案:

没有答案