【问题标题】:Odd partitions using last_day使用 last_day 的奇数分区
【发布时间】:2010-11-25 12:32:43
【问题描述】:

大家好 我正在尝试在这里自动化分区过程,并且很好地解决了一些奇怪的问题。 为什么以下工作不起作用?

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.

【问题讨论】:

    标签: oracle date partitioning


    【解决方案1】:

    正如您发布的链接所说:

    分区绑定元素必须为1 of:字符串、日期时间或间隔 文字、数字或 MAXVALUE

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

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

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

    【讨论】:

    • 嗯.. 不完全是。我以前曾尝试过。似乎并非如此。你看,cdate 字段是日期类型的。如果你只是做... VALUES LESS THAN (to_date('20101101', 'YYYYMMDD')) ... 它就可以了!尽管如此,我也尝试将我的 cdate 转换为字符串并使用 to_char 并且在放置“last_day”的东西时它不起作用......奇怪......
    • 我已经更新了我的答案。 TO_DATE('20101101', 'YYYYMMDD') 被认为是日期文字,而 LAST_DAY(TO_DATE('20101101', 'YYYYMMDD')) 不是。
    猜你喜欢
    • 2012-12-23
    • 2017-05-13
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多