ORACLE创建自动分区表 || ORA-14400: inserted partition key does not map to any partition

在PL/SQL中,数据表A已经存在数据了

要求给A表创建按月自动分区,根据字段SJ(时间)来进行分区

做法:

1、首先创建一个A表的分区表B(创建分区表只能这样子创建

CREATE TABLE  B 
PARTITION BY RANGE(SJ)  INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
(
PARTITION SJ_1 VALUES LESS THAN(TO_DATE(' 2021-02-01 00:00:00','SYYYY-MM-DD HH24:MI:SS')) TABLESPACE A_DAT
)
AS SELECT * FROM A;

以上这个是按月自动分区;--  INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))

 按年:INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))

 按日:INTERVAL(NUMTOYMINTERVAL(1,'DAY'))

 按周:INTERVAL(NUMTODSINTERVAL (7, 'DAY'))

2、再将A表的名字给为C

ALTER TABLE A RENAME TO C; 

3、将B表的名字改为A

ALTER TABLE B RENAME TO A; 

4、将C(即原来的A表)的索引、注释、主键等数据结构同样添加到A(即分区表)表,最后删除C表即可。

这样就能得到创建好的自动分区表拉!

 

注意:

如果是这样创建(没+INTERVAL(NUMTOYMINTERVAL(1,'MONTH')),即是一个不会自动分区的分区表,当有新的数据进来(即sj大于2021-02-01 00:00:00的)就会报错ORA-14400: inserted partition key does not map to any partition(提示这个错误的时候说明,表结构没有对应的分区,所以插入不进去,解决方法就是创建新数据对应的分区段,或者将分区表改为按月自动分区表即可)

CREATE TABLE  B 
PARTITION BY RANGE(SJ) 
(
PARTITION SJ_1 VALUES LESS THAN(TO_DATE(' 2021-02-01 00:00:00','SYYYY-MM-DD HH24:MI:SS')) TABLESPACE A_DAT,
PARTITION SJ_2 VALUES LESS THAN(TO_DATE(' 2021-03-01 00:00:00','SYYYY-MM-DD HH24:MI:SS')) TABLESPACE A_DAT
)
AS SELECT * FROM A;

当然如果不想用自动分区的话,也可以

方式一、

手动添加分区,针对注意里面创建的不自动分区表

添加分区:

ALTER TABLE A ADD PARTITION SJ_3 VALUES LESS THAN (TO_DATE(' 2021-03-01 00:00:00','SYYYY-MM-DD HH24:MI:SS')) TABLESPACE A_DAT;

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值