Oracle 使用最后一天的奇数分区

Oracle 使用最后一天的奇数分区,oracle,date,partitioning,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 (cd

嗨,小伙子们 我试图在这里自动化一个分区过程,并且很好地解释了一些奇怪的事情。 为什么你不做下面的工作

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
                )
)
我们的想法是使用
最后一天(截止日期('20101101','yyyyymmdd')
这样每个漂亮的分区都会在该月的最后一天结束,每个人都很高兴。然而,当我试图执行代码时,我得到了一个

[更新]

真奇怪:

这项工作:

  (...)
  PARTITION flp_aa_1010 VALUES LESS THAN (to_date('20101101', 'YYYYMMDD'))
  (...)
  (...)
  PPARTITION flp_aa_1010 VALUES LESS THAN to_date(last_day(to_date('201010','YYYYMM'))))
  (...)
这不起作用:

  (...)
  PARTITION flp_aa_1010 VALUES LESS THAN (last_day(to_date('20101101', 'YYYYMMDD')))
  (...)
而这个不会再次

  (...)
  PARTITION flp_aa_1010 VALUES LESS THAN (to_date('20101101', 'YYYYMMDD'))
  (...)
  (...)
  PPARTITION flp_aa_1010 VALUES LESS THAN to_date(last_day(to_date('201010','YYYYMM'))))
  (...)
什么鸭子?我错过了哪节课? 所有这些函数的输出不是都一样吗

有谁能启发我吗

干杯


f、

正如您发布的链接所示:

分区绑定元素必须为1 类型:字符串、日期时间或间隔 文字、数字或最大值

函数调用(最后一天)不是字符串、日期时间或间隔 文字、数字或最大值。诚然,TO_DATE是一个函数调用,但这是允许的例外,因为传统上它是生成日期文本的唯一方法(现在可以使用ANSI格式DATE'2010-11-26',但不是很多人知道这一点)。看

但是,在生成值“20101101”时,您可以应用LAST_DAY并使用结果来代替它-类似于:

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

正如您发布的链接所示:

分区绑定元素必须为1 类型:字符串、日期时间或间隔 文字、数字或最大值

函数调用(最后一天)不是字符串、日期时间或间隔 文字、数字或最大值。诚然,TO_DATE是一个函数调用,但这是允许的例外,因为传统上它是生成日期文本的唯一方法(现在可以使用ANSI格式DATE'2010-11-26',但不是很多人知道这一点)。看

但是,在生成值“20101101”时,您可以应用LAST_DAY并使用结果来代替它-类似于:

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

好。。不完全是。我以前试过。事实似乎并非如此。你看,字段
cdate
是日期类型。如果你只是做
。。。值小于(截止日期('20101101','yyyyymmdd')…
有效!尽管如此,我还是尝试将我的cdate转换成字符串,并使用to_char,但在放置“last_day”时,它将不起作用。。。奇怪…我更新了我的答案。截止日期('20101101','YYYYMMDD')被认为是日期文字,而最后一天(截止日期('20101101','YYYYMMDD')则不是。。不完全是。我以前试过。事实似乎并非如此。你看,字段
cdate
是日期类型。如果你只是做
。。。值小于(截止日期('20101101','yyyyymmdd')…
有效!尽管如此,我还是尝试将我的cdate转换成字符串,并使用to_char,但在放置“last_day”时,它将不起作用。。。奇怪…我更新了我的答案。截止日期('20101101','YYYYMMDD')被视为日期文字,而最后一天(截止日期('20101101','YYYYMMDD')则不是。