2013-06-18 117 views
1

我想創建一個表,並通過範圍分區,然後通過散列子分區。但我得到一個錯誤。我懷疑腳本中出了什麼問題。當我們進行範圍分區時,我們可以爲散列指定不同數量的子分區,如下面的例子(分區OTHER_1有三個子分區,而其他所有分區有兩個分區)。Oracle 11g複合分區 - 範圍|哈希

CREATE TABLE ACCOUNTHOLDER_P (id INT, purchased DATE, OBJECT_TYPE VARCHAR2(50), PHONE_NUMBER VARCHAR2(50))

PARTITION BY RANGE (OBJECT_TYPE)
SUBPARTITION BY HASH(PHONE_NUMBER) (

PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||') TABLESPACE USERS (  
    SUBPARTITION sp1 TABLESPACE ABC, 
    SUBPARTITION sp2 TABLESPACE ABC 
), 

PARTITION CONSUMER_1 VALUES LESS THAN ('||''''||'User%'||''''||') TABLESPACE USERS ( 
    SUBPARTITION sp3 TABLESPACE XYZ, 
    SUBPARTITION sp4 TABLESPACE XYZ 
), 

PARTITION OTHER_1 VALUES LESS THAN (MAXVALUE) TABLESPACE USERS (
    SUBPARTITION sp5 TABLESPACE KLM, 
    SUBPARTITION sp6 TABLESPACE KLM, 
    SUBPARTITION sp7 TABLESPACE KLM 
)); 

錯誤:

SQL Error: ORA-00907: missing right parenthesis 00907. 00000 - "missing right parenthesis" *Cause:
*Action:

感謝

問候,

時代

+0

請解釋爲什麼VALUES LESS THAN子句對於分區來說太複雜了。你試圖分裂什麼樣的實際價值? – APC

+0

處理撇號/單引號時會帶來複雜性。以下理論適用於此。 SELECT'There'|| ''''|| 'Alan'==有Alan謝謝。 – era

回答

3

瑣碎...

評論後
KLM, 
^that's the problem 

更新:

檢查這些單引號。尚不清楚您是否希望它們屬於您的分區值,也是百分比符號。也許代替

PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||') 

,會做你想要什麼:第二評論後

PARTITION PARTNER_1 VALUES LESS THAN ('Partner') 

更新:

我只能猜測,你可能會尋找類似的東西:

select '||'''||'User%'||'''||' from dual; 

||'User%'|| 

但是,它只是沒有將其用作分區值是有意義的。請解釋你想要完成的事情。

+0

對不起。這是我發佈正確的SQL的不好之處。我糾正了查詢。即使沒有這個','我仍然得到同樣的錯誤。 – era

+0

請參閱主要問題下的評論。我正在試圖處理撇號/單引號。這就是爲什麼在這裏的複雜性。 – era

3

散列分區和子分區應該總是以2 - 2,4,8,16,32等的權力出現 - 否則最終會導致它們之間的行不均勻分佈。

這且不說,還有如何指定哈希子分區數量的文檔中的例子 - 我無法想象爲什麼你要做到這一點http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#i1006565

,雖然。散列分區對於提高大型同等鏈接的性能很有用,但當連接表具有相同數量的散列分區/子分區時,這是最有效的。

+0

謝謝大衛。我不加入表格。即使在範圍分區之後,我對每個分區都有一個大塊。所以我決定進一步使用散列進行子分區。根據我的理解,這是正確的,我期待着性能的提高。我不清楚爲什麼每個分區需要相同數量的子分區。 – era

+0

那麼我不知道爲什麼你會有不同數量的子分區。你如何確定每個分區使用多少個子分區?此外,您希望看到哪種類型的操作可以提高性能,爲什麼? –