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')则不是。