Oracle:按月分区表
Posted
技术标签:
【中文标题】Oracle:按月分区表【英文标题】:Oracle: Partition table by month 【发布时间】:2013-01-07 19:46:45 【问题描述】:我的解决方案(德语月份):
PARTITION BY LIST ((to_char(GEBURTSDATUM, 'Month')))
(
PARTITION p1 VALUES('JANUAR'),
PARTITION p2 VALUES('Februar'),
PARTITION p3 VALUES('MÄRZ'),
PARTITION p4 VALUES('APRIL'),
PARTITION p5 VALUES('MAI'),
PARTITION p6 VALUES('JUNI'),
PARTITION p7 VALUES('JULI'),
PARTITION p8 VALUES('AUGUST'),
PARTITION p9 VALUES('SEPTEMBER'),
PARTITION p10 VALUES('OKTOBER'),
PARTITION p11 VALUES('NOVEMBER'),
PARTITION p12 VALUES('DEZEMBER')
);
由于to_char
函数,这不起作用。
【问题讨论】:
【参考方案1】:在 11g 中,您可以通过定义虚拟列来使用基于函数的分区:http://www.oracle-base.com/articles/11g/partitioning-enhancements-11gr1.php#virtual_column_based_partitioning
否则,您必须为分区月份手动定义和维护单独的列。
我建议在这两种情况下都使用月份数字而不是名称。
【讨论】:
【参考方案2】:如果表有日期列,下面的语句可以作为从今天开始每月分区的例子(Oracle 11g):
PARTITION BY RANGE (date_column)
INTERVAL (NUMTODSINTERVAL(1,'month') )
(PARTITION p_first VALUES LESS THAN ('16-MAY-2016'));
【讨论】:
如果要按月分区,需要NUMTOYMINTERVAL,NUMTODSINTERVAL不起作用。以上是关于Oracle:按月分区表的主要内容,如果未能解决你的问题,请参考以下文章
Oracle普通表按月转分区表,通过PLSQL包一键生成分区表