2011-03-16 72 views
0

我有一个表被划分的基于时间戳(如partition1将有9个月大的数据,partition2有6个月的数据,partition3有3个月的数据等)我们可以从<tab>分区<part.>有删除where子句吗?

我需要根据删除数据条件在特定分区上。

delete from table1 partition partition3 
where group id in (select * from table1 where group_code='pilot'); 

此操作只会从partiton3删除吗?

回答

1

首先,语法是:

delete from table1 partition(partition3) 

其次,你应参考分区名称。它创建了对表格物理布局的依赖关系。它今天可能每月进行分区,但可能会在未来几周或几天内重新分区。发生这种情况时,您的代码将会中断。 Oracle可以根据分区列上的谓词来推断分区。尽量忘记正在分区的表格。

第三,由于select *与ID进行比较,您的子选择将失败。

你正在寻找的声明可能看起来是这样的:

delete 
    from table1 
where group_code = 'pilot' 
    and partition_column = 'some value'; 
0

分区透明地工作,这意味着你可以简单地做一个普通

delete table1 
where group_id in (select group_id from table2 where group_code = 'pilot') 
    and your_date_column 
     between trunc(sysdate,'mm') - interval '3' month 
      and trunc(sysdate,'mm') - interval '2' month 

优化器将知道第二个谓词意味着只有来自partition3的数据需要删除。

Regards,
Rob。

相关问题