数据库中的表有个日期字段,字符类型的,是年和月放在一起的。比如“2014-09”这样
我想要根据这个字段拆开月份进行分区,但是这样貌似不太行,单独的月份字段肯定就可以,大家看看这种情况该怎么分区。
create table CBFX_DETAIL_FINANCE ( C_VOUCHERID VARCHAR2(200), C_PERIOD VARCHAR2(7), D_CREATEDATE VARCHAR2(100), C_USERID VARCHAR2(100), C_USERNAME VARCHAR2(200), C_BATCH VARCHAR2(200), C_ABSTRACT VARCHAR2(600), C_ABSTRACT_ROW VARCHAR2(600), C_SOURCE VARCHAR2(200), C_ALLCOST VARCHAR2(200), C_UNITNO VARCHAR2(100), C_UNITDESCRIPTION VARCHAR2(200), C_DEPARTMENTNO VARCHAR2(200), C_DEPARTMENTNAME VARCHAR2(200) ) partition by range (substr(C_PERIOD,6)) ( partition GLKJ_DATASZICHAN_PT_01 values less than ('01') tablespace MONTH01, partition GLKJ_DATASZICHAN_PT_02 values less than ('02') tablespace MONTH02, partition GLKJ_DATASZICHAN_PT_03 values less than ('03') tablespace MONTH03, partition GLKJ_DATASZICHAN_PT_04 values less than ('04') tablespace MONTH04, partition GLKJ_DATASZICHAN_PT_05 values less than ('05') tablespace MONTH05, partition GLKJ_DATASZICHAN_PT_06 values less than ('06') tablespace MONTH06, partition GLKJ_DATASZICHAN_PT_07 values less than ('07') tablespace MONTH07, partition GLKJ_DATASZICHAN_PT_08 values less than ('08') tablespace MONTH08, partition GLKJ_DATASZICHAN_PT_09 values less than ('09') tablespace MONTH09, partition GLKJ_DATASZICHAN_PT_10 values less than ('10') tablespace MONTH10, partition GLKJ_DATASZICHAN_PT_11 values less than ('11') tablespace MONTH11, partition GLKJ_DATASZICHAN_PT_12 values less than ('12') tablespace MONTH12, partition GLKJ_DATASZICHAN_PT_13 values less than (maxvalue) tablespace allcost );会报错: ora-00907: 缺失右括号!
这个错误算是oracle的一个bug了,有时候同一SQL不同版本的oracle执行会遇到该问题。
建议:
1、2014-09改成201409
2、分区语句就不需要substr了,partitionbyrange(年月)(partitionp1valueslessthan('201401'),
partitionp2valueslessthan('201402'),
partitionp12valueslessthan('201412'));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。