2015-02-06 73 views
0

我試圖在谷歌搜索我的情況,但沒有人談論這種情況。Oracle分區間隔2列間隔

我有一個表即將分割2列。 爲2列分區任何人都可以顯示間隔的例子嗎?

在這種情況下,我只有一個。 在這個例子中如何使用的間隔2列

INTERVAL(NUMTODSINTERVAL(1,'DAY')) 

我的表:

create table TABLE_TEST 
(
PROCESS_DATE DATE GENERATED ALWAYS AS (TO_DATE(SUBSTR("CHARGE_DATE_TIME",1,10),'yyyymmdd')), 
PROCESS_HOUR VARCHAR(10) GENERATED ALWAYS AS  (SUBSTR("CHARGE_DATE_TIME",12,2)), 
ANUM varchar(100), 
SWTICH_DATE_TIME varchar(100), 
CHARGE_DATE_TIME varchar(100), 
CHARGE varchar(100), 
) 
TABLESPACE TB_LARGE_TAB 
PARTITION BY RANGE (PROCESS_DATE, PROCESS_HOUR) 
INTERVAL(NUMTODSINTERVAL(1,'DAY')) 

非常感謝, Macieira

回答

2

如果您的範圍有多個列,則不能使用間隔;你會得到:ORA-14750:帶INTERVAL子句的範圍分區表有多個列。 From the documentaion

只能指定一個分區鍵列,並且它必須是數字,日期,FLOAT,或TIMESTAMP數據類型。

我不知道爲什麼你分裂的日期和時間分成不同的列(因爲日期有時間分量反正),或者爲什麼要存儲的「真實」的日期和數字值串;只要首先使用正確的數據類型的列就簡單多了。但是,假設你是在存儲數據的方式設置,並且需要單獨process_dateprocess_hour列,你有他們,你可以添加,結合他們第三個虛擬列:

create table TABLE_TEST 
(
    PROCESS_DATE DATE GENERATED ALWAYS AS (TO_DATE(SUBSTR(CHARGE_DATE_TIME,1,10),'YYYYMMDD')), 
    PROCESS_HOUR VARCHAR2(8) GENERATED ALWAYS AS (SUBSTR(CHARGE_DATE_TIME,12,2)), 
    PROCESS_DATE_HOUR DATE GENERATED ALWAYS AS (TO_DATE(CHARGE_DATE_TIME, 'YYYYMMDDHH24')), 
    ANUM VARCHAR2(100), 
    SWTICH_DATE_TIME VARCHAR2(100), 
    CHARGE_DATE_TIME VARCHAR2(100), 
    CHARGE VARCHAR2(100) 
) 
PARTITION BY RANGE (PROCESS_DATE_HOUR) 
INTERVAL (NUMTODSINTERVAL(1,'DAY')) 
(
    PARTITION TEST_PART_0 VALUES LESS THAN (DATE '1970-01-01') 
); 

Table table_test created. 

我也改變了你的字符串數據鍵入varchar2並添加一個製作的初始分區。 process_hour可能希望成爲數字類型,具體取決於您將如何使用它。因爲我不知道爲什麼要選擇當前的數據類型,所以很難說出什麼更合適。

我不明白你爲什麼希望分區範圍是每小時,而間隔時間是一天,除非你想要分區從中午到中午;在這種情況下,初始分區(test_part_0)必須指定該時間,並且您的範圍規範仍然是錯誤的。

+0

數據量非常巨大,我們需要運行這個過程每小時這就是爲什麼我們要分開這個過程。 – macieira 2015-02-08 12:10:10

1

間隔分區只能在一列之上。

在你的情況下,你有適當的分區鍵列 - CHARGE_DATE_TIME。爲什麼你創建虛擬列作爲VARCHAR2?爲什麼你需要在它們上創建分區鍵?只能在NUMBER或DATE列上構建間隔分區。

+0

'charge_date_time'雖然是一個字符串,所以它不能直接用於間隔。 (爲什麼它是一個字符串是一個完整的其他問題...) – 2015-02-06 10:03:35

+0

好點。我錯過了那個 – Rusty 2015-02-06 12:02:34

+0

我們顯示這個信息沒有Web應用程序。最好是String。我找到了解決方案。我已將小時用作子分區。 – macieira 2015-02-08 12:08:02