2010-11-25 34 views
1

嗨夥計 我試圖自動化這裏的分區過程,並且很好地處理奇怪的事情。 爲什麼以下工作?使用last_day的奇數分區

create table flp_aa (cdate date, value varchar2(255)) 
PCTUSED 0 
PCTFREE 10 
INITRANS 1 
MAXTRANS 255 
STORAGE (
      INITIAL   64M 
      ) 
LOGGING 
PARTITION BY RANGE (cdate) 
( 
    PARTITION flp_aa_1010 VALUES LESS THAN (last_day(to_date('20101101', 'YYYYMMDD'))) 
    NOLOGGING 
    NOCOMPRESS 
    PCTFREE 10 
    INITRANS 1 
    MAXTRANS 255 
    STORAGE (
       INITIAL   64M 
       NEXT    512K 
       MINEXTENTS  1 
       MAXEXTENTS  UNLIMITED 
       PCTINCREASE  0 
       BUFFER_POOL  DEFAULT 
       ) 
) 

的想法是使用last_day(to_date('20101101', 'YYYYMMDD'))所以每個分區漂亮上月的最後一天結束,大家很高興。不過,我得到一個ORA-14019試圖執行這些代碼時...

[更新]

織補奇:

工作

(...) 
    PARTITION flp_aa_1010 VALUES LESS THAN (to_date('20101101', 'YYYYMMDD')) 
    (...) 

這不工作:

(...) 
    PARTITION flp_aa_1010 VALUES LESS THAN (last_day(to_date('20101101', 'YYYYMMDD'))) 
    (...) 

不會再

(...) 
    PPARTITION flp_aa_1010 VALUES LESS THAN to_date(last_day(to_date('201010','YYYYMM')))) 
    (...) 

什麼鴨子?我錯過了哪堂課? 是不是所有這些功能的輸出相同?

任何人都可以啓發我嗎?

歡呼聲

f。

回答

1

當你發佈的鏈接說:

分區結合元件必須是 的:字符串,日期時間或間隔 文字,數字或MAXVALUE

函數調用(LAST_DAY)不是字符串,日期時間或間隔 文字,數字或MAXVALUE。誠然,TO_DATE是一個函數調用,但這被允許作爲一個異常,因爲傳統上它是生成DATE文字的唯一方法(現在可以使用ANSI格式DATE'2010-11-26'但不是很多人知道那)。見documentation

但是,在您生成值「20101101」的時候,你可以申請LAST_DAY和使用結果,而不是說 - 是這樣的:

'... VALUES LESS THAN (' || TO_CHAR (LAST_DAY (...), 'YYYYMMDD') || ')...' 
+0

嗯..不大。我曾嘗試過。似乎並非如此。你看,字段`cdate`是日期類型的。如果你只是做'...價值小於(to_date('20101101','YYYYMMDD'))...`它的工作!儘管如此,我還嘗試將我的cdate轉換爲字符串並使用to_char,並且在放置「last_day」時奇怪... – filippo 2010-11-25 14:20:20