使用last_day的奇数分区

时间:2010-11-25 12:32:43

标签: oracle date partitioning

嗨小伙子们 我试图在这里自动化分区过程,并且很好地变成奇怪的东西。 为什么不跟随工作?

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 ...

[UPDATE]

Darn odd:

工作

  (...)
  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 个答案:

答案 0 :(得分:1)

正如您发布的链接所示:

  

分区绑定元素必须是一个   of:string,datetime或interval   文字,数字或MAXVALUE

函数调用(LAST_DAY)不是字符串,日期时间或间隔 文字,数字或MAXVALUE。是的,TO_DATE是一个函数调用,但这被允许作为一个例外,因为传统上它是生成DATE文字的唯一方法(你现在可以使用ANSI格式DATE'2010-11-26'但不是很多人都知道那)。请参阅documentation

但是,在您生成值'20101101'时,您可以应用LAST_DAY并使用结果而不是 - 例如:

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