嗨小伙子们 我试图在这里自动化分区过程,并且很好地变成奇怪的东西。 为什么不跟随工作?
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。
答案 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') || ')...'