度量快速开发平台-专业、快速的软件定制快开平台
标题: ora-14400:插入的分区关键字未映射到任何分区 [打印本页]
作者: fteair 时间: 2020-2-14 19:29
作者: 张兴康 时间: 2020-2-15 14:40
作者: 张兴康 时间: 2020-6-13 13:51
标题: ora-14400:插入的分区关键字未映射到任何分区
ora-14400:插入的分区关键字未映射到任何分区。
过程如下:
首先创建一个分区表:
create table TEST_INSER
(
ST_INSER_CODE VARCHAR2(20),
DT_INSER_WRITEDATE DATE
)
PARTITION BY RANGE(DT_INSER_WRITEDATE)
(
PARTITION jan2008 VALUES LESS THAN(TO_DATE('2008-2-1','YYYY-MM-DD')),
PARTITION feb2008 VALUES LESS THAN(TO_DATE('2008-3-1','YYYY-MM-DD')),
PARTITION mar2008 VALUES LESS THAN(TO_DATE('2008-4-1','YYYY-MM-DD')),
PARTITION apr2008 VALUES LESS THAN(TO_DATE('2008-5-1','YYYY-MM-DD')),
PARTITION may2008 VALUES LESS THAN(TO_DATE('2008-6-1','YYYY-MM-DD')),
PARTITION jun2008 VALUES LESS THAN(TO_DATE('2008-7-1','YYYY-MM-DD')),
PARTITION jul2011 VALUES LESS THAN(TO_DATE('2011-8-1','YYYY-MM-DD'))
);
然后将已经存在表T_INSER中的数据导入这个新建的分区表
SQL>INSERT INTO TEST_INSER SELECT * FROM T_INSER;
报ora-14400错误!
尝试如下:
SQL>INSERT INTO TEST_INSER SELECT * FROM T_INSER WHERE DT_INSER_WRITEDATE IS NOT NULL;
依旧报错!
SQL>ALTER TABLE TEST_INSER ENABLE ROW MOVEMENT;
依旧报错!
SQL>ALTER TABLE TEST_INSER DROP PARTITION jul2011;
SQL>ALTER TABLE TEST_INSER ADD PARTITION maxpart VALUES LESS THAN (MAXVALUE);
成功导入了!
SQL>SELECT * FROM TEST_INSER PARTITION (maxpart);
检查一下最后一个partition中的数据,发现有DT_INSER_WRITEDATE有2028年的,原来不是NULL值惹的祸,我以为该字段有NULL值,所以开始才加了IS NOT NULL的过滤条件,仍旧导不进去,说明还是字段的值的确超出了现有的partition的值范围。至于那个ENABLE ROW MOVEMENT语句段,可以看这个例子:
SQL>ALTER TABLE TEST_INSER DISABLE ROW MOVEMENT;
SQL>UPDATE TEST_INSER SET DT_INSER_WRITEDATE=TO_DATE('2008-3-1','YYYY-MM-DD') WHERE TO_CHAR(DT_INSER_WRITEDATE,'YYYY') = '2028';
报错!ORA-14402:更新分区关键字列将导致分区的更改
SQL>ALTER TABLE TEST_INSER ENABLE ROW MOVEMENT;
SQL>UPDATE TEST_INSER SET DT_INSER_WRITEDATE=TO_DATE('2008-3-1','YYYY-MM-DD') WHERE TO_CHAR(DT_INSER_WRITEDATE,'YYYY') = '2028';
成功!
作者: 张兴康 时间: 2020-6-13 13:52
作者: 陈晓龙 时间: 2020-6-13 14:58
作者: 陈晓龙 时间: 2020-6-13 14:59
作者: 张兴康 时间: 2020-6-16 13:44
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) |
Powered by Discuz! X3.2 |