2011-03-16 36 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。

相關問題