2013-03-21 47 views
1

我有一個用例,我需要根據城市對Oracle表進行分區。現在我不知道這個城市。所以在這種情況下,我將如何創建分區。 (順便說一下,我已經做了哈希分區(它不保證兩個城市的數據將在同一分區),但我想要分開的城市的數據在單獨的分區)在新值可能出現的所有不同值上分開

回答

2

最明智的做法是使用存儲插入/更新程序,以確保分區存在(如Egor Skriptunoff所建議的)。

如果你不想使用這種方法,你可以使用列表分區和一個預先定義的城市列表和一個默認分區,其中存儲「未知」城市的所有值。然後,您可以設置拆分「未知」分區並創建新的城市分區定期清理作業:

與三個已知城市

create table shops (
    pk number not null primary key, 
    name varchar2(30) not null, 
    city varchar2(30) not null) 
partition by list(city) 
(partition shops_paris values ('Paris'), 
partition shops_berlin values ('Berlin'), 
partition shops_london values ('London'), 
partition shops_unknown values (default) 
); 

添加一些數據分區設置表(注意,我們有一個 「未知」 的城市,慕尼黑)

insert into shops(pk, name, city) values (1, 'Manufactum', 'Munich'); 
insert into shops(pk, name, city) values (2, 'KaDeWe', 'Berlin'); 
insert into shops(pk, name, city) values (3, 'Harrods', 'London'); 
insert into shops(pk, name, city) values (4, 'Galeries Lafayette', 'Paris'); 

查看我們未知的分區 - >我們得到了一個新的城市, '慕尼黑'

select * from shops partition (shops_unknown); 

創建新分區

alter table shops split partition shops_unknown 
    values ('Munich') into (partition shops_munich, partition shops_unknown); 
0

新分區應明確創建。
包括所有相關的邏輯放到一個過程:如果存在分區

  • 創建如果需要
  • 插入值到表新

    • 檢查
  • 相關問題